No tutorial anterior, instalamos e configuramos o bundle Knp Paginator, para fazer a paginação de posts em nosso index, agora vamos instalar e configurar o Bundle StofDoctrineExtensionsBundle, para fazermos os slugs de nossos posts
Instalação do bundle StofDoctrineExtensionsBundle
Para instalar o StofDoctrineExtensionsBundle, temos que adicioná-lo em nosso composer.json. Abra o arquivo composer.json e adicione a linha abaixo:
Depois de adicionando o StofDoctrineExtensionsBundle no composer, vamos instalá- lo. Entre no terminal e digite:
Após o Download, o StofDoctrineExtensionsBundle está instalado em nossa aplicação.
Configurando o StofDoctrineExtensionsBundle
A primeira configuração que devemos fazer, é registrar o novo bundle instalado, para isso entre no AppKernel, caminho: app/AppKernel.php
Adicione a linha abaixo no registro de bundles:
Veja na linha 17:
Pronto, o StofDoctrineExtensionsBundle está registrado.
Agora vamos fazer as configurações no arquivo config.yml, caminho: app/config/config.yml
No final do arquivo adicione as configurações abaixo:
Configurando a entidade Post
Temos que configurar nossa entidade post, para que a mesma receba os slugs. Entre na entidade post, caminho: src/Tableless/ModelBundle/Entity/Post.php
Vamos dar um use em Annotation, e apelidá-la de Gedmo veja abaixo:
Agora vamos criar uma propriedade privada chamada slug, com as suas annotations correspondentes, veja:
Temos que gerar os getters e setters, para isso vamos entrar no terminal e digitar:
Pronto, em nossa entidade Post, temos os getters e setters, veja:
Configurando o Banco de Dados
Depois de nossa entidade configurada, temos que atualizar o banco de dados, porém se tivermos posts já criados, ocorrerá um erro em nosso blog. Caso não tenha nenhum post escrito poderá rodar o comando abaixo:
Caso tenha escrito algum post para exemplo, como no meu caso, vamos excluir o banco de dados, e criá lo novamente. Entre no terminal e digite:
Excluindo o banco de dados:
Criando o banco de dados novamente:
Criando as tabelas:
Obs: Caso tenha posts escritos, e não queria excluir o banco de dados, poderá apenas atualizá-lo, porém terá que adicionar manualmente, slug por slug em cada post no banco de dados, senão ocorrerá erro na aplicação.
Veja a estrutura do banco de dados:
Configurando o Controller
Depois de termos feito as configurações citadas acima, vamos configurar nosso controller, para isso entre no IndexControlerController, caminho: src/Tableless/CoreBundle/Controller/IndexControlerController.php
No nosso método showAction, estamos passando por parâmetro o $id, no momento não queremos mais buscar nossos posts pelo id, e sim pelo slug, vamos alterar:
de:
para:
Temos que mudar também a annotation da rota, veja:
de:
para:
Estamos passando para a variável $post, o método find, e recuperando o id, vamos mudar o find para findOneBy e passar um array de slug, veja:
Veja o método showAction pronto:
Configurando o index
Em nossa index, estamos passando os links para que os posts sejam buscados pelo id, porém temos que alterá- los para que possamos buscar os posts pelo slug.
Entre no index.html.twig, caminho: src/Tableless/CoreBundle/Resources/views/IndexController/Index.html.twig
Vamos alterar os links:
No meu caso a linha 21, 29 e 35:
de:
para:
Testando nossa aplicação:
Caso tenham seguido o tutorial e excluído o bando de dados, que foi criado novamente, como no meu caso. Antes de criarmos um post, temos que criar os autores novamente, depois sim criarmos os posts. No meu caso vou criar apena um post para exemplo.
Depois do post criado, click no link e observe a url, verá o slug, que em nosso caso é o slug do titulo, veja:
Conclusão
Pronto, nosso simples projeto está retornando o slug dos post em nossa url.
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
Iniciando com Symfony 2 – parte 07
Iniciando com Symfony 2 – parte 08
O projeto encontra-se no GitHub!