Php 不同视图组的自定义错误页
我的应用程序有一个登录页和一个管理面板。所以,我想为这些视图创建不同的404页面。我的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
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版本?