Несколько дней я искал способ создать персонализированный контроллер page404 с Symfony 2.8, однако я не нашел никакой помощи по этому поводу. Единственная информация, которую мне удалось получить, находится в KnpUniversity: пример KnpUniversity
Однако поскольку пример неполный, я вообще не понимаю, что делать. У меня уже есть персонализированная версия error404.html.twig. Если у вас есть какой-либо базовый шаблон для этого контроллера и некоторые пояснения по этому поводу, я был бы очень признателен.
За любую дополнительную информацию, не стесняйтесь. Поскольку я новичок, я мало что понимаю в создании контроллера ошибок.
Да, я уже прочитал эту документацию по symfony, но это не так. Помоги мне.
Вот пример URL-адреса, который мне нужно проверить: my.website.com/en/hotel/england/london/palacio
Правильный en/{hotel|villa}/england/london/palacio как URL-адрес, но страница не существует, поэтому я показываю кнопку, с которой я могу перенаправить на:
my.website.com/en/hotel/england/london/ но в случае, когда URL-адрес не соответствует fr или en и отелю или вилле, просто покажите кнопка перехода на главную страницу.
Состав моего URL сделан из базы данных. Итак, я хочу проверить каждую часть таблицы базы данных, соответствующую 3 последним элементам моего URL-адреса. первые два проще, как показано в примере ниже.
Ошибка404Контроллер
<?php
namespace FrontendBundle\Controller;
class Error404Controller extends Controller
{
/*
* @Route(
* "/{_locale}/{_type}/{$countryName}/{$cityName}/{$etablishementName}",
* requirements={
* "_locale": "en|fr",
* "_type": "hotels|villas|restaurants"
* }
* )
*/
public function showExceptionAction($countryName,$cityName,$etablishementName)
{
$em = $this->getDoctrine()->getManager();
$events = $em->getRepository('FrontendBundle:Error404')
->getUpcomingEvents();
//$urlreçu = $request->getUri();
//$urlredirect =0;
/*
* 1)Pays
* 2)Ville
* 3)Etablissment
* Si le Pays existe vérifier la Ville sinon retourner un bouton de redirection sur la home
* Si la Ville existe vérifier le l'établissement sinon retourner boutons de redirection sur la home et la recherche le pays
* Si l'établissement existe retourner les bouton home et recherche avec pays,ville,etablisee sinon retourner bouton home/recherche avec 1,2
*
* */
$country = $this->getDoctrine()->getRepository(FrontendBundle::Error404)->findCountryCityByName($countryName);
$city = $this->getDoctrine()->getRepository(FrontendBundle::Error404)->findCountryCityByName($cityName);
$etablishement = $this->getDoctrine()->getRepository(FrontendBundle::Error404)->findEtablishementBySlug($etablishementName);
return $this->render('app/Resources/TwigBundle/views/Exception/error404.html.twig', array(
'redirection' => $events,
));
}
}
Ошибка 404 Репозиторий
<?php
namespace FrontendBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;
use SG\FrameworkBundle\Model\CrudEntityInterface;
class Error404Repository extends EntityRepository
{
/*
* Recherche dans sg_content_translation
*/
public function findCountryCityBySlug($slug)
{
$qb = $this->createQueryBuilder()
->select('world.published_slug')
->from('super_table','world')
->where('world.published_slug= ?1')
->setParameter(1,$slug);
return $qb->getQuery()->getOneOrNullResult();
}
public function findEtablishementBySlug($slug){
$qb = $this->createQueryBuilder()
->select('world.published_slug')
->from('my_table','world')
->where('world.published_slug= ?1')
->setParameter(1,$slug);
return $qb->getQuery()->getOneOrNullResult();
}
}
Вот мой config.yml, если я правильно понял переопределение
twig:
exception_controller: FrontendBundle:Error404:showExceptionAction
И это в мой service.yml
services:
# twig.controller.exception:
# class: %twig.controller.exception.class%
# arguments: ["@twig", "%kernel.debug%", "@doctrine"]
app.exception_controller:
class: FrontendBundle\Controller\Error404Controller
arguments: ['@twig','%kernel.debug%']
Я не могу заменить контроллер исключений по умолчанию или я где-то ошибаюсь. Может ли кто-нибудь дать мне представление об этом?
Я получаю: ** Контроллер "FrontendBundle:Error404:showExceptionAction" для URI "/en/villas/france/bernadette" не вызывается. ** и решение, которое я нашел в Интернете, не предназначено для ExceptionController.
Спасибо за помощь :)