带通配符的 Silex 路由抛出错误 500

Silex Routing with wildcard throws error 500

我刚刚注意到,当 URL 出现错误时,例如:http://example.com/articles/qslkdqm;控制器抛出错误 500 而不是错误 404。

因此,我尝试在控制器检查 slug 以检索数据时手动更改 StatusCode :

控制器

$article = $app['dao.article']->getArticle($slug); 
if (!$article) {
    $response = new Response();
    $response->setStatusCode(404);
}

但是它不起作用,仍然抛出错误 500。

这正常吗?我们完全同意这应该是 404?

我知道它会抛出错误 500,因为某些变量未定义(即文章标题)。这是否意味着在每个变量调用中,我只是检查它是否存在,例如:

{% if title is defined %}
...
{% endif %}

?

感谢您的回答。

您可以通过这种方式停止出现 404 错误的应用程序:

if (!$article) {
    $app->abort(404);
}

if (!$article) {
    throw new \Symfony\Component\HttpKernel\Exception\HttpException(404);
}