Iniciando com Symfony 2 – Parte 07

No tutorial anterior, estilizamos nossas páginas, index e show, e incluímos um imagem para apresentar nossos posts no index, porém colocamos esta imagem pelo código fonte, agora vamos fazer algumas configurações, para que, na criação dos posts, tenha a opção de fazer o upload de uma imagem, para ser apresentada como capa de nossos posts.

No tutorial anterior, estilizamos nossas páginas, index e show, e incluímos um imagem para apresentar nossos posts no index, porém colocamos esta imagem pelo código fonte, agora vamos fazer algumas configurações, para que, na criação dos posts, tenha a opção de fazer o upload de uma imagem, para ser apresentada como capa de nossos posts.

Configurando a entidade Post

Para criarmos um upload de imagem, vamos usar o componente http-foundation do Symfony, e usar sua classe UploadedFile em nossa entidade Post.

Para isso, vamos entrar em nossa entidade Post, caminho: src/Tableless/ModelBundle/Entity/Post.php.

Com a entidade Post aberta vamos dar um use em UploadedFile, veja na linha 7:

Precisamos criar dois atributos privados, $cover, e $file , e inserir as annotations correspondentes, o atributo $cover, receberá o nome da imagem, e o $file o aquivo com um limite de tamanho, veja abaixo:

Vamos fazer os Getters and Setters desses atributos.

O setFile receberá um parâmetro $file, esse parâmetro será do tipo UploadedFile, e caso não passamos uma imagem, poderá ser nulo, veja os getters and setters criados:

Precisamos obter o caminho relativo do upload, ou seja, a pasta para onde as imagens serão enviadas; para isso vamos criar o método protegido getUploadPath(), que nos retornará essa pasta. Veja abaixo:

Temos que obter o caminho absoluto, para fazer o upload de nossas imagens, que ficará na pasta web, para isso vamos criar o método protegido getUploadAbsolutePath(), que nos retornará o caminho absoluto, e para chegarmos na pasta “uploads/covers”, vamos concatenar com o método getUploadPath() criado acima, veja:

Agora precisamos apresentar o caminho de nossas imagens para as views, vamos criar o método público getCoverWeb(), caso tenhamos uma imagem, ou seja, caso a imagem não seja nula, apresentamos a imagem nas views, para isso usaremos o método getUploadPath(), concatenado com o nome de nossa imagem, ou seja o método getCover(), veja:

Podemos precisar do caminho absoluto de nossa imagem, para isso vamos criar o método getCoverAbsolute(), para obtermos esse caminho quando precisarmos, veja:

Agora temos que criar um método que fará o upload da imagem, para isso criaremos um método como nome upload(), caso a imagem não seja nula, ele fará o upload usando alguns métodos prontos da classe UploadedFile, para mover a imagens, veja:

Pronto, nossa entidade Post, agora está recebendo um upload de imagem.

Veja o entidade Post pronta:

Configurando o controller

Para que nossos formulários de posts tenham acesso ao upload, temos que configurar o controller PostController.

Entre no PostController, caminho: src/Tableless/CoreBundle/Controller/PostController.php, e no método createAction, insira o código $entity->upload(); veja na linha 15:

Temos que fazer o mesmo procedimento com o método updateAction na linha 23, veja:

Configurando os formulários

Pronto, nossa entidade e controller de posts, estão configurados para receberem o upload, porém temos que configurar nossos formulários. Entre no PostType.php, para fazermos as configurações necessárias, caminho: src/Tableless/ModelBundle/Form/PostType, e no método buildForm adicione o ‘file’, veja na linha 10.

Atualizando o banco de dados

Para vermos a mágica acontecer, só precisamos, atualizar nosso banco, para isso entre no terminal e digite:

Pronto! Nosso upload de imagem, está pronto, veja a imagem:

Configurando as views

Agora temos que configurar nossas views para que as mesmas apresentem as imagens. Entre na view index.html.twig, caminho: src/Tablesless/CoreBundle/Resources/views/IndexController/index.html.twig, mude a linha 21.

mude de:

para:

Vamos entrar em nossa view show.html.twig, caminho: caminho: src/Tablesless/CoreBundle/Resources/views/IndexController/show.html.twig, e vamos acrescentar a mesma linha acima do título, ou onde acharem melhor, veja:

Vamos fazer os testes, criando um novo post, e inserindo uma imagem.

Observe a imagem na pasta web/uploads/cover.

Conclusão

Pronto, nosso simples projeto está fazendo upload de imagens para cada post, no próximo tutorial vamos aprender a configurar um Bundle pronto, disponibilizado pela comunidade, onde faremos a paginação de resultados para nossa página index.

Links dos tutoriais anteriores:

Iniciando com Symfony 2 – Instalação

Iniciando com Symfony 2 – parte 02

Iniciando com Symfony 2 – parte 03

Iniciando com Symfony 2 – parte 04

Iniciando com Symfony 2 – parte 05

Iniciando com Symfony 2 – parte 06

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 *