Iniciando com Symfony 2 – Parte 04

Anteriormente, criamos a entidade Post, vamos dar continuidade ao nosso simples projeto, criando uma entidade Author, faremos o relacionamento para que cada autor fique ligado ao post que criou. Criando a entidade Author Vamos criar a entidade Author, entre no terminal e digite: Vamos digitar o nome da entidade como : TablelessModelBundle:Author. Vamos mapeá-la usando

Anteriormente, criamos a entidade Post, vamos dar continuidade ao nosso simples projeto, criando uma entidade Author, faremos o relacionamento para que cada autor fique ligado ao post que criou.

Criando a entidade Author

Vamos criar a entidade Author, entre no terminal e digite:

Vamos digitar o nome da entidade como : TablelessModelBundle:Author.

Vamos mapeá-la usando annotation. Apenas damos enter.

O assistente nos pergunta: Qual será o nome do nosso campo?

Digitamos “name” e damos enter.

Será do tipo string.

Com o tamanho de 100.

Quando o assistente nos perguntar novamente: Qual será o novo campo? Damos enter para entrarmos no processo de finalização. E nos pergunta, se queremos criar uma classe de repositório, ele nos indica não, vamos apenas dar um enter.

E para finalizar, o assistente pergunta se realmente queremos gerar a entidade. Como queremos, digitamos apenas enter.

Nossa entidade Author está pronta.

Ao entrarmos na pasta src/Tableless/ModelBundle/Entity/ vamos encontrá-la.

Agora devemos adicionar a annotations, @ORMTable(name=”author”) para o nome da nossa tabela, veja na linha 10:

Veja toda a entidade Author:

Configurando o projeto

Nesse momento vamos criar uma classe abstrata com o nome Timestampable, para que não fiquemos repetindo código, pois entidade Author também receberá uma data de criação e data de atualização.

Vamos lá!

Entre na pasta src/Tableless/ModelBundle/Entity/, e vamos criar uma classe abstrata com o nome Timestampable, para que possamos mapeá lá vamos usar a classe do Doctrine Mapping e vamos dar um apelido de ORM, e fazer as annotations correspondentes.

Nesse momento, ficar explicando detalhe por detalhe levará muito tempo, e o tutorial ficará extenso, veja a classe Timestampable pronta abaixo:

Vamos estender essa classe na entidade Author, veja abaixo na linha 13:

Temos que validar os campos da entidade Author, vamos dar um use em Constraints e apelidá-la como Assert:

vamos validar o campo name com @AssertNotBlank, veja abaixo:

Veja a entidade Author depois da configuração:

Configurando a entidade Post

Como criamos um classe abstrata, vamos alterar a entidade Post para que ela estenda a entidade Timestampable.

Exclua os atributos $createdAt e $updatedAt e os métodos setCreatedAt(), getCreatedAt(), setUpdatedAt(), getUpdatedAt() e o __contruct(), e vamos estender a classe Timestampable, depois de configurada, a entidade Post ficará assim:

Atualizando o banco de dados

Geramos a entidade Author e alteramos a entidade Post, dessa forma devemos atualizar nosso banco, para que o mesmo fique configurado de acordo com as entidades.

Vamos ao terminal, e para atualizar o banco de dados vamos digitar o código:

Teremos o resultado:

Entrando no banco de dados vamos perceber que a tabela author criada:

Criando o CRUD da entidade Author

Depois da configuração das nossa entidade, vamos gerar o CRUD da entidade Author. Vamos digitar no console:

Digitamos TablelessModelBundle:Author:

O assistente nos pergunta se queremos gerar as ações de gravação, digitamos: yes.

Como vamos configurar? Vamos deixar como está, annotation, e damos enter

Como será a rota? Vamos deixar como ele nos indica, damos enter.

Vamos confirmar a geração desse CRUD dando enter.

Prontinho nosso CRUD da entidade Author está pronto, vamos testar.

Inicie o servidor:

entre na url:

https://127.0.0.1:8000/author/

Vamos criar um autor com o nome Tableless

Vamos fazer um relacionamento no banco de dados, pois queremos que, ao criarmos um post, o mesmo esteja relacionado com o autor que o criou. Não entraremos em detalhes sobre relacionamento, caso tenha dúvidas, consulte a documentação.

Vamos configurar novamente as entidades para que o relacionamento possa acontecer.

Entre na entidade Post e acrescente o atributo $author com as seguintes annotations:

Entre na entidade Author e acrescente o atributo $post, com as seguintes annotations:

Precisamos também dar um use na classe ArrayCollection, do Doctrine, pois um autor terá vários posts, e os posts serão buscados como array, insira o código:

Vamos criar um construtor, porém a entidade Timestampable já tem um construtor, para resolver esse problema, vamos adicionar um parent::__construct(), veja abaixo:

Agora vamos gerar os métodos necessários da entidade Author, entre no console e digite:

Temos que gerar também para a entidade Post:

Entre novamente na entidade Author e acrescente o método abaixo no final da entidade:

Veja como ficou a entidade Author depois de configurarmos:

Veja a entidade Post, após a configuração:

Agora vamos atualizar o banco de dados para gerar o relacionamento, para isso apague todo o conteúdo das tabelas do banco de dados, caso não o faça, ocorrerá erro,

Após apagar o conteúdo do banco, rode o comando no console:

Corrigindo os formulários

Entre na classe PostType, caminho: src/Tableless/ModelBundle/Form/PostType, e acrescente a linha abaixo, no método buildForm:

Também vamos apagar as linhas:

Pois não precisamos inserir as datas, em que o post foi criado, ou alterado, isso acontecerá automaticamente!

Depois das modificações, o método formBuilder ficará como abaixo:

Tudo configurado para que possamos criar nossos posts.

Para verificarmos se está tudo correto, precisamos criar primeiramente um autor, depois criamos um post, onde teremos que selecionar um autor, para o mesmo.

Veja abaixo:

Lembrando que a url de autor é:

https://127.0.0.1:8000/author/

e a url de post é:

https://127.0.0.1:8000/post/

Conclusão

Vamos terminar este tutorial, pois seu conteúdo está muito extenso, no próximo, vamos fazer as configurações necessárias em nossa simples aplicação, e vamos criar um index, para mostrar nossos posts, que configuraremos com o Bootstrap, e com o template engine twig. O projeto encontra-se no GitHub!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *