Пользовательский шаблон ошибки генерирует фатальную ошибку

0

Я создал файл

/myapp/app/Resources/TwigBundle/views/Exception/error.html.twig

с этим контентом

{% extends 'MyappBundle::base.html.twig' %}

{% block body %}
<div>
    <h1>Error</h1>
    <p>The server returned a "{{ status_code }} {{ status_text }}".</p>
</div>
{% endblock %}

Вот как я расширяю все шаблоны в своем приложении, и он работает без каких-либо проблем. Но это не работает для обработки ошибок. Я всегда получаю это сообщение об ошибке:

Неустранимая ошибка: Не удалось исключить "Symfony\Component\HttpKernel\Exception\NotFoundHttpException" с сообщением "Не удалось найти объект". в C:\xampp\htdocs\myapp\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Controller\Controller.php: 218 Трассировка стека: # 0 C:\xampp\htdocs\myapp\src\myapp\MyappBundle\Controller\AddressController.php(207): Symfony\Bundle\FrameworkBundle\Controller\Controller-> createNotFoundException ('Не удается найти...') # 1 [внутренняя функция]: myapp\MyappBundle\Controller\Address Controller- > showAction ('= k21RBNjM') # 2 C:\xampp\htdocs\myapp\app\bootstrap.php.cache(3020): call_user_func_array (Array, Array) # 3 C:\xampp\htdocs\myapp\app\bootstrap.php.cache(2982): Symfony\Component\HttpKernel\HttpKernel-> handleRaw (объект (Symfony\Component\HttpFoundation\Request), 1) # 4 C:\xampp\htdocs\myapp\app\bootstrap.php. cache (3131): Symfony\Component\HttpKernel\HttpKernel-> handle (Object (Symfony\Component\HttpFoundation\Request), 1, true) # 5 C:\xampp\htdocs\myapp\app\bootstrap.php.cache(2376) в C:\xampp\htdocs\myapp\app\bootstrap.php.cache в строке 2998

Вот как я выбрал ошибку 404:

$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MyBundle:Entity')->find($id);
if (!$entity) {
    throw $this->createNotFoundException('Unable to find entity.');
}

Я использую Win7 с PHP v5.5.6 и Symfony v2.6.3. При запуске на моем рабочем сервере я получаю пустую страницу (вообще нет исходного кода). И, конечно же, я очистил свой кеш.

Обновить

Когда я пытаюсь просмотреть страницу ошибок в режиме dev, я получаю это сообщение об ошибке:

Фильтр слияния работает только с массивами или хешами; NULL и массив, заданные в TwigBundle: Исключение: error.html.twig в строке 1.

Я вообще не использую twig_array_merge.

Обновление 2

Это вызвано вызовом path() где я объединяю _route_params и _locale в моем footer.html.twig который я включаю из моего MyappBundle::base.html.twig:

<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': lang})) }}"><span class="flag-icon flag-icon-{{ lang }}"></span> {{ lang }}</a>

Он работает со всеми моими шаблонами, за исключением шаблона ошибки. Что здесь не так, как я могу это исправить?

  • 0
    Mayby в base.html.twig twig_array_merge выдает ошибку? ...
  • 0
    Нет, я вообще не использую twig_array_merge.
Показать ещё 8 комментариев
Теги:
error-handling
http-status-code-404

1 ответ

1
Лучший ответ

Простейшим решением, хотя и не обязательно наиболее желательным, является изменение строки в обновлении 2 следующим образом:

{% if app.request.get('_route_params') is not null %}
<a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale': lang})) }}"><span class="flag-icon flag-icon-{{ lang }}"></span> {{ lang }}</a>
{% endif %}
  • 0
    Это помогает, да. Хотя это всего лишь обходной путь (это, вероятно, ошибка).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню