使所有错误状态代码 return 成为一个自定义视图
Make all error status codes return a single custom view
By default、Laravel 在 resources/views/errors
下查找错误视图,return 查找相关状态代码的相应视图,例如。 404 或 403。我不想手动创建所有这些视图,而是想对所有错误代码使用我自己的自定义视图,实际错误代码和消息使用 getMessage()
和任何其他可能的辅助函数在视图中动态显示我可以使用。
这样我就可以正常执行此操作:
abort(<statuscode>, <mymessage>)
...但总是 return 只有一个视图。
请注意,我所要求的 与所要求的 here 不同 而非 ,即无论其实际状态代码如何,都将所有错误强制为 404s .我想保持状态代码应有的样子,只需将它们全部呈现在同一视图中即可。
在 default exception handler 中,一个名为 getHttpExceptionView()
的方法将视图确定为 return。只需用您想要的逻辑在 App\Exceptions\Handler
class 中覆盖它。
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
protected function getHttpExceptionView($e)
{
if ($e->getStatusCode() === 409) {
return "exceptions.special";
}
return "exceptions.default";
}
您正在 return 标准视图路径,dot-separated 如果您正在使用目录。
如 所述,我将以下内容添加到 App\Exceptions\Handler.php
文件内 Handler
class 的底部:
class Handler extends ExceptionHandler
{
// Default classes
// ...
protected function getHttpExceptionView($e)
{
// 409 errors are handled specially
// Remove this if block entirely to serve them with the same error page as below
if ($e->getStatusCode() === 409) {
return "exceptions.special";
}
return "errors.custom"; // Return a "custom" file under "resources/views/errors"
}
}
然后我将以下内容添加到我的错误视图中:
<h1 class="primary-header">
@if($exception)
{{"Error " . $exception->getStatusCode().":"}}
{{ $exception->getMessage() ? $exception->getMessage() : "page not found" }}
@else {{ "Generic error: page not found" }}
@endif
</h1>
这现在允许我在控制器中使用 abort()
函数,例如,抛出带有可选消息的任何 HTTP 错误代码:
Route::get("/failtest/", function (){
abort(404, "someone messed up");
});
By default、Laravel 在 resources/views/errors
下查找错误视图,return 查找相关状态代码的相应视图,例如。 404 或 403。我不想手动创建所有这些视图,而是想对所有错误代码使用我自己的自定义视图,实际错误代码和消息使用 getMessage()
和任何其他可能的辅助函数在视图中动态显示我可以使用。
这样我就可以正常执行此操作:
abort(<statuscode>, <mymessage>)
...但总是 return 只有一个视图。
请注意,我所要求的 与所要求的 here 不同 而非 ,即无论其实际状态代码如何,都将所有错误强制为 404s .我想保持状态代码应有的样子,只需将它们全部呈现在同一视图中即可。
在 default exception handler 中,一个名为 getHttpExceptionView()
的方法将视图确定为 return。只需用您想要的逻辑在 App\Exceptions\Handler
class 中覆盖它。
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
protected function getHttpExceptionView($e)
{
if ($e->getStatusCode() === 409) {
return "exceptions.special";
}
return "exceptions.default";
}
您正在 return 标准视图路径,dot-separated 如果您正在使用目录。
如 App\Exceptions\Handler.php
文件内 Handler
class 的底部:
class Handler extends ExceptionHandler
{
// Default classes
// ...
protected function getHttpExceptionView($e)
{
// 409 errors are handled specially
// Remove this if block entirely to serve them with the same error page as below
if ($e->getStatusCode() === 409) {
return "exceptions.special";
}
return "errors.custom"; // Return a "custom" file under "resources/views/errors"
}
}
然后我将以下内容添加到我的错误视图中:
<h1 class="primary-header">
@if($exception)
{{"Error " . $exception->getStatusCode().":"}}
{{ $exception->getMessage() ? $exception->getMessage() : "page not found" }}
@else {{ "Generic error: page not found" }}
@endif
</h1>
这现在允许我在控制器中使用 abort()
函数,例如,抛出带有可选消息的任何 HTTP 错误代码:
Route::get("/failtest/", function (){
abort(404, "someone messed up");
});