Php 不同视图组的自定义错误页

Php 不同视图组的自定义错误页,php,laravel,laravel-5,Php,Laravel,Laravel 5,我的应用程序有一个登录页和一个管理面板。所以,我想为这些视图创建不同的404页面。我的views文件夹有两个文件夹:admin和site,其中我有errors文件夹,其中包含创建的404.blade.php文件。为了实现我的目标,我在app/Exceptions/Handler.php中重写了一个名为renderhttppeexception(HttpException$e)的方法,但不幸的是它不起作用。解决办法是什么 以下是renderhttppeexception(HttpException

我的应用程序有一个登录页和一个管理面板。所以,我想为这些视图创建不同的404页面。我的
views
文件夹有两个文件夹:
admin
site
,其中我有
errors
文件夹,其中包含创建的
404.blade.php
文件。为了实现我的目标,我在
app/Exceptions/Handler.php
中重写了一个名为
renderhttppeexception(HttpException$e)
的方法,但不幸的是它不起作用。解决办法是什么

以下是
renderhttppeexception(HttpException$e)
方法:

protected function renderHttpException(HttpException $e) 
{
    $status = $e->getStatusCode();

    if(Request::is('/admin/*')) { 
        return response()->view("admin/errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
    }else {
        return response()->view("site/errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
    }    
}
/* Site routes */
Route::get('/', 'HomeController@index')->name('home');
Route::get('/menu', 'MenuController@index')->name('menu');

/* Admin panel routes */
Route::prefix('/admin')->namespace('Admin')->group(function () {
    Route::get('/', 'HomeController@index')->name('admin-dashboard');
    Route::get('/login', 'HomeController@showLoginForm')->name('admin-login');
    Route::get('/menu', 'MenuController@index')->name('admin-menu');
});
以及路由:

protected function renderHttpException(HttpException $e) 
{
    $status = $e->getStatusCode();

    if(Request::is('/admin/*')) { 
        return response()->view("admin/errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
    }else {
        return response()->view("site/errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
    }    
}
/* Site routes */
Route::get('/', 'HomeController@index')->name('home');
Route::get('/menu', 'MenuController@index')->name('menu');

/* Admin panel routes */
Route::prefix('/admin')->namespace('Admin')->group(function () {
    Route::get('/', 'HomeController@index')->name('admin-dashboard');
    Route::get('/login', 'HomeController@showLoginForm')->name('admin-login');
    Route::get('/menu', 'MenuController@index')->name('admin-menu');
});
结果会抛出一个错误:

protected function renderHttpException(HttpException $e) 
{
    $status = $e->getStatusCode();

    if(Request::is('/admin/*')) { 
        return response()->view("admin/errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
    }else {
        return response()->view("site/errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
    }    
}
/* Site routes */
Route::get('/', 'HomeController@index')->name('home');
Route::get('/menu', 'MenuController@index')->name('menu');

/* Admin panel routes */
Route::prefix('/admin')->namespace('Admin')->group(function () {
    Route::get('/', 'HomeController@index')->name('admin-dashboard');
    Route::get('/login', 'HomeController@showLoginForm')->name('admin-login');
    Route::get('/menu', 'MenuController@index')->name('admin-menu');
});
App\Exceptions\Handler::renderHttpException(App\Exceptions\HttpException$e)的声明应与Illumb\Foundation\Exceptions\Handler::renderHttpException(Symfony\Component\HttpKernel\Exception\HttpException$e)兼容


将其放置在\App\Exceptions\Handler::render中

if($exception instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
    $view = $request->is('admin/*') ? 'admin/errors.404' : 'site/errors.404' ;

    return response()->view($view, [], 404);
}
因此,您的方法应该如下所示:

public function render($request, Exception $exception)
{
    if($exception instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) {
        $view = $request->is('admin/*') ? 'admin/errors.404' : 'site/errors.404' ;

        return response()->view($view, [], 404);
    }


    $e = $this->prepareException($exception);

    if ($e instanceof FlashingException) {
        return $e->getResponse();
    }
    return parent::render($request, $exception);
}

这个dd($request->route()->getPrefix());是否正常工作?(调整它以使用facade)如果是,则更改If(Request::is('/admin/*'){…使用If($Request->route()->getPrefix()='/admin')@CalinBlaga我应该把它放在哪里?在renderHttpException()中@CalinBlaga请看这个问题,我更新了。它抛出了一个错误…结果是上面给出的代码无法工作。laravel版本?