所以我正在做一个项目,我想制作像404 500这样的自定义错误页面。。。
所以我在symfony文档中读到,我所要做的就是composer twig-pack
,然后在这个树目录templatesbundlesTwigBundleException
中添加error404.html.twig
。要完成,我必须更改我的.env以查看我的美容错误页面。
但是,当我试图键入一个错误的url,期望得到404时,我得到了500(symfony的基本错误页面(。
我检查了我的日志,发现我得到了这个严重错误:
[2021-07-14T08:35:15.194689+00:00] request.ERROR: Uncaught PHP Exception SymfonyComponentHttpKernelExceptionNotFoundHttpException: "No route found for "GET https://micro59/dejifosd"" at C:wampwwwProjectsmicroprovendorsymfonyhttp-kernelEventListenerRouterListener.php line 136 {"exception":"[object] (Symfony\Component\HttpKernel\Exception\NotFoundHttpException(code: 0): No route found for "GET https://micro59/dejifosd" at C:\wamp\www\Projects\micropro\vendor\symfony\http-kernel\EventListener\RouterListener.php:136)n[previous exception] [object] (Symfony\Component\Routing\Exception\ResourceNotFoundException(code: 0): No routes found for "/dejifosd/". at C:\wamp\www\Projects\micropro\vendor\symfony\routing\Matcher\Dumper\CompiledUrlMatcherTrait.php:70)"} []
[2021-07-14T08:35:15.229712+00:00] php.CRITICAL: Uncaught Error: SymfonyBridgeTwigExtensionRoutingExtension::getPath(): Argument #1 ($name) must be of type string, null given, called in C:wampwwwProjectsmicroprovarcacheprodtwigd5d51256555fdd9ed9db40150aba9ba2f8325c04e57ae45e60937191a29447ddd2.php on line 37 {"exception":"[object] (TypeError(code: 0): Symfony\Bridge\Twig\Extension\RoutingExtension::getPath(): Argument #1 ($name) must be of type string, null given, called in C:\wamp\www\Projects\micropro\var\cache\prod\twig\d5\d51256555fdd9ed9db40150aba9ba2f8325c04e57ae45e60937191a29447ddd2.php on line 37 at C:\wamp\www\Projects\micropro\vendor\symfony\twig-bridge\Extension\RoutingExtension.php:46)"} []
[2021-07-14T08:35:15.232242+00:00] request.CRITICAL: Uncaught PHP Exception TypeError: "SymfonyBridgeTwigExtensionRoutingExtension::getPath(): Argument #1 ($name) must be of type string, null given, called in C:wampwwwProjectsmicroprovarcacheprodtwigd5d51256555fdd9ed9db40150aba9ba2f8325c04e57ae45e60937191a29447ddd2.php on line 37" at C:wampwwwProjectsmicroprovendorsymfonytwig-bridgeExtensionRoutingExtension.php line 46 {"exception":"[object] (TypeError(code: 0): Symfony\Bridge\Twig\Extension\RoutingExtension::getPath(): Argument #1 ($name) must be of type string, null given, called in C:\wamp\www\Projects\micropro\var\cache\prod\twig\d5\d51256555fdd9ed9db40150aba9ba2f8325c04e57ae45e60937191a29447ddd2.php on line 37 at C:\wamp\www\Projects\micropro\vendor\symfony\twig-bridge\Extension\RoutingExtension.php:46)"} []
啊啊啊那就是我被卡住的地方。我尝试了很多事情(Composer更新、清除缓存…(,但都没有改变。如果有人能好心帮助我,我将不胜感激。
类&错误消息中的方法RoutingExtension::getPath()
定义了一个Twig函数-path((。error404.html.twig文件使用了该函数,但没有所需的第一个参数("name",路由名称(,或者传递给它的值为null。
How to Customize Error Pages有一个简单的错误页面模板,并有一个示例路径/路由名称{{ path('homepage') }}
。
您可以使用bin/console debug:router
获得到目前为止可用的路由列表——它必须是框架已知的,否则它将抛出关于未知路由的错误。
它还有一个.yaml,可以用来在开发中提供错误页面(您的控制器很好,这会更干净、更容易——而且只有在开发中才可用,因为只有当APP_ENV变量为"dev"时,才会读取config/目录中的路径(。
如果你还没有,composer require debug-pack
和任何错误——包括在你的"/error404"页面上——都会显示一个"大的友好错误页面",还应该添加很多有用的信息——通常包括显示树枝模板中的文件和行。
在这种特定情况下由于错误的类型,它做不到,因为它在Twig库内部深处(来自PHP类型的系统,不是Symfony或Twig直接发现的错误(,但它在堆栈跟踪中有一个链接,显示编译后的twitch模板(在./var/cache/dev/twitch/../….PHP中的一个随机命名文件中(,并显示它在twitch模版中调用->getPath();
的位置,因此您可以在实际.titch文件(它为模板中的行号添加注释以提供帮助(。