我目前正在公开查看该项目的工作,即出于管理目的的前端和后端。
遇到404错误时,我想为后端和前端分别显示错误页面。
可以在laravel中做吗?
还是我们也可以基于名称空间创建错误页面?
目前,我在/resources/views/errors/
目录中有错误页面。
任何建议都值得赞赏。如果需要更多信息,请随时询问。
答案 0 :(得分:0)
可能不是最佳选择。
您可以在Exception Handler的render()
方法中基于当前路径来分离视图。
app / Exceptions / Handler.php:
public function render($request, Exception $exception)
{
if ($exception instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
if(str_is('/admin*', request()->path())){
return response()->view('errors.backend.404', [], 404);
} else {
return response()->view('errors.frontend.404', [], 404);
}
}
return parent::render($request, $exception);
}
答案 1 :(得分:0)
我知道这已经是一岁了,但是只是基于这个答案。我建议更好的方法不是在您的render
方法中编写if语句,而是拉下getHttpExceptionView()
方法并将其覆盖。
(将此代码段添加到您的App\Exceptions\Handler.php
中-它会覆盖父类中的内容)
/**
* Get the view used to render HTTP exceptions.
*
* @param \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface $e
* @return string
*/
protected function getHttpExceptionView(HttpExceptionInterface $e)
{
$adminErrorView = "admin.errors.{$e->getStatusCode()}";
if (Str::is('admin*', request()->path())) {
if (view()->exists($adminErrorView)) {
return $adminErrorView;
}
}
return "errors::{$e->getStatusCode()}";
}
这样,如果您的请求路径来自“ admin”(或路径中任意位置带有admin的任何内容),它将获得您可以在views/admin/errors
中创建的自定义错误文件-像它们一样命名前端...通过错误状态代码(404.blade.php
,500.blade.php
等)
(编辑:对我的代码进行了调整,因此即使该视图尚不存在,它也会默认返回到正常的前端错误视图)