O que é o SensioFrameworkExtraBundle?
O SensioFrameworkExtraBundle é um pacote de classes Symfony que facilita o desenvolvimento de aplicativos da web Symfony seguindo as melhores práticas do Symfony e do PHP. Ele fornece recursos para gerar automaticamente páginas de erro personalizadas, para gerar códigos de status HTTP apropriados e para criar facilmente páginas de documentação para os aplicativos Symfony.
Como instalar o SensioFrameworkExtraBundle no Symfony?
Para instalar o SensioFrameworkExtraBundle no Symfony, você precisará adicioná-lo ao seu arquivo composer.json. Você pode fazer isso executando o seguinte comando no terminal:
composer require sensio/framework-extra-bundle
Depois de concluir a instalação, você precisará ativar o pacote adicionando-o ao seu arquivo AppKernel.php.
Como usar o SensioFrameworkExtraBundle para definir o caminho do controlador?
Para definir o caminho do controlador no Symfony usando o SensioFrameworkExtraBundle, você precisará adicionar a anotação @Route acima do método do controlador. O exemplo a seguir mostra como definir uma rota para um método do controlador e definir parâmetros opcionais na URL:
/**
* @Route("/blog/{year}/{month}/{day}/{slug}", name="blog_show",
* defaults={"day": "01", "month": "01"})
*/
public function show($year, $month, $day, $slug)
{
// ...
}
Neste exemplo, o método show() será chamado sempre que a URL “/blog/{year}/{month}/{day}/{slug}” for acessada. Os parâmetros year, month, day e slug serão passados para o método show() como argumentos. Se a data não for especificada, a data padrão será 01/01.
Como usar o SensioFrameworkExtraBundle para definir o cache HTTP?
Para definir o cache HTTP usando o SensioFrameworkExtraBundle, você precisará adicionar a anotação @Cache acima do método do controlador. O exemplo a seguir mostra como definir o cache para uma página específica:
/**
* @Route("/blog/{id}", name="blog_show")
* @Cache(expires="tomorrow")
*/
public function show($id)
{
// ...
}
Neste exemplo, a página será armazenada em cache até a meia-noite de amanhã. Você também pode especificar outras opções de cache, como definir o cache para ser privado ou para ser armazenado em cache dependendo do valor de cookies.
Como usar o SensioFrameworkExtraBundle para definir acessos HTTP com segurança?
Para definir acesso HTTP com segurança usando o SensioFrameworkExtraBundle, você precisará adicionar a anotação @Security acima do método do controlador. O exemplo a seguir mostra como definir quem pode acessar uma página específica:
/**
* @Route("/admin", name="admin_home")
* @Security("has_role('ROLE_ADMIN')")
*/
public function adminHome()
{
// ...
}
Neste exemplo, apenas os usuários que têm a função ROLE_ADMIN podem acessar a página. Você também pode especificar outras opções de segurança, como permitir o acesso a uma página somente se o usuário estiver autenticado.
Como usar o SensioFrameworkExtraBundle para definir o nome de exibição do cabeçalho?
Para definir o nome de exibição do cabeçalho usando o SensioFrameworkExtraBundle, você precisará adicionar a anotação @Template acima do método do controlador. O exemplo a seguir mostra como definir o nome de exibição do cabeçalho para uma página específica:
/**
* @Route("/blog/{id}", name="blog_show")
* @Template("@AcmeBlog/Show/show.html.twig")
*/
public function show($id)
{
// ...
}
Neste exemplo, o nome de exibição do cabeçalho é definido como “@AcmeBlog/Show/show.html.twig”. Esse nome de exibição será usado pelo template do Symfony para gerar a saída.
Como usar o SensioFrameworkExtraBundle para definir parâmetros de requisição?
Para definir parâmetros de requisição usando o SensioFrameworkExtraBundle, você precisará adicionar a anotação @ParamConverter acima do método do controlador. O exemplo a seguir mostra como converter um parâmetro de cadeia de caracteres em um objeto de entidade:
/**
* @Route("/blog/{slug}", name="blog_show")
* @ParamConverter("post", class="AppBundle:Post", options={"repository_method" = "findBySlug"})
*/
public function show(Post $post)
{
// ...
}
Neste exemplo, o parâmetro {slug} na URL é convertido em um objeto de entidade Post usando o método findBySlug() do repositório Post. Esse objeto de entidade é passado para o método do controlador como um argumento tipado.
Como usar o SensioFrameworkExtraBundle para definir a tradução?
Para definir a tradução usando o SensioFrameworkExtraBundle, você precisará adicionar a anotação @Translatable acima do método do controlador. O exemplo a seguir mostra como definir a tradução para um parágrafo específico:
/**
* @Route("/about", name="about")
* @Template("@AcmeBlog/About/about.html.twig")
* @Translatable("about_paragraph")
*/
public function about()
{
// ...
}
Neste exemplo, o parágrafo com o nome “about_paragraph” será traduzido em vários idiomas. Você também pode definir traduções para outras partes do aplicativo, como títulos de página, botões e mensagens de erro.
Como usar o SensioFrameworkExtraBundle para definir um ouvinte de evento?
Para definir um ouvinte de evento usando o SensioFrameworkExtraBundle, você precisará adicionar a anotação @Listener acima do método do controlador. O exemplo a seguir mostra como definir um ouvinte de evento para uma determinada ação:
/**
* @Route("/blog/create", name="blog_create")
* @Method({"GET", "POST"})
* @Template("@AcmeBlog/Create/create.html.twig")
* @Listener("AppBundleEventBlogEvent")
*/
public function create(Request $request)
{
// ...
}
Neste exemplo, o ouvinte de evento é acionado sempre que a ação “blog_create” é chamada. O ouvinte de evento é definido na classe AppBundleEventBlogEvent. Quando o evento é acionado, a lógica de negócios é executada dentro da classe.
Como usar o SensioFrameworkExtraBundle para definir o formulário?
Para definir o formulário usando o SensioFrameworkExtraBundle, você precisará adicionar a anotação @Form acima do método do controlador. O exemplo a seguir mostra como definir o formulário para um método de criação de blog:
/**
* @Route("/blog/create", name="blog_create")
* @Method({"GET", "POST"})
* @Template("@AcmeBlog/Create/create.html.twig")
* @Form(type="AppBundleFormPostType")
*/
public function create(Request $request, Post $post)
{
// ...
}
Neste exemplo, o formulário é definido por meio da classe AppBundleFormPostType. Quando o formulário é enviado, os dados são validados e processados pela classe PostType.