Ik gebruik voor mijn website Symfony2 en nu ben ik erachter gekomen dat als ik een pagina open die niet bestaat, deze een 500 error geeft ipv een 404, waarnaast ook nog mijn template niet wordt weergegeven.
Ik heb gedebugd en ben erachter gekomen dat mijn Twig template het niet correct doet. Ik extend '::layout.html.twig', maar dit doet het dus niet. Als ik dit weghaal en alleen HTML laat staan, doet hij het wel. Hoe kan dit?
Het vreemde is ook nog dat er niks in app/logs/prod.log, maar alles als een uncaught exception naar de apache2 error log wordt gelogt, met een "Uncaught exception 'Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException'".
Dit is mijn template die het niet doet:
{% extends '::layout.html.twig' %}
{% block title %}Pagina niet gevonden{% endblock %}
{% block content %}
<div class="hero-unit">
<h1>Niet gevonden :(</h1>
<p>Sorry, maar de pagina die je probeerde te bereiken, is niet gevonden</p>
</div>
{% endblock %}
En deze doet het wel:
<div class="hero-unit">
<h1>Niet gevonden :(</h1>
<p>Sorry, maar de pagina die je probeerde te bereiken, is niet gevonden</p>
</div>
You must not use is_granted in your error pages (or layout used by your error pages), because the router runs before the firewall. If the router throws an exception (for instance, when the route does not match), then using is_granted will throw a further exception. You can use is_granted safely by saying {% if app.user and is_granted('...') %}.
Ah, dat waarschijnlijk het probleem. Zowel de router als de Authentication doen hun werk tijdens het kernel.request event. Hierbij wordt eerst de router en dan pas de Authentication aangeroepen. Dat betekend dat als de router een exception geeft (omdat hij geen route kan vinden), de Authentication niet meer wordt aangeroepen. Dat betekend dat functies als is_granted niet werkt.
You must not use is_granted in your error pages (or layout used by your error pages), because the router runs before the firewall. If the router throws an exception (for instance, when the route does not match), then using is_granted will throw a further exception. You can use is_granted safely by saying {% if app.user and is_granted('...') %}.
[size=xsmall]Toevoeging op 24/08/2013 19:45:11:[/size]
Sorry frank, ik had niet gezien dat jij al gereageerd had.
Het werkt als ik die app.user toevoeg, maar is het niet raar dat Symfony geen exception geeft zoals 'No security context' ofzo? Dat zou toch veel logischer zijn dan gewoon een exception niet te catchen.
Iets anders logisch kan zijn dat als er een exception optreed in de exception handler dat Symfony dan zelf een exception page geeft?
Nee, dat gebeurd niet in de productie omgeving. Symfony catched alle exceptions in de dev. omgeving en symfony catched ook alle exceptions in de productie omgeving, maar dan worden die gelogd en niet als een pagina gerenderd. Exceptions moet je nooit aan de gebruiker tonen, behalve als je bepaalde user exceptions hebt, maar die moet je dan zelf in een controller of tijdens het kernel.exception event catchen.
En ja, het is vreemd dat je alleen een ResourceNotFound exception krijgt. Het lijkt erop dat symfony alleen de laatste exception logt, en niet alle vorige exception. Het lijkt erop dat dit vroeger wel werkte: https://github.com/symfony/symfony/issues/5320