有人能告诉我如何让我的"找不到页面"或其他消息吗?例如,如果有人在浏览器中写了一个我的项目中不存在的链接,而不是显示标准错误页面(哇,出了问题,找不到View[bla.bla]),而是显示我指定的页面?
<?php
Route::get('sendemail', 'EmailController@sendEmail');
Route::get('test', 'AuthController@getTest');
Route::get('napravisiadmin', 'ClassbookController@getIndex');
Route::group(['middleware' => ['web']], function () {
Route::group(['middleware' => ['guest']
], function () {
Route::get('login', 'AuthController@getLogin');
Route::post('login', 'AuthController@postLogin');
});
Route::get('logout', 'AuthController@getLogout');
//Admin
Route::group(['middleware' => ['auth', 'auth.admin']
], function () {
Route::group([
'prefix' => 'admin',
'namespace' => 'Admin'
], function () {
Route::controller('student', 'StudentsController');
Route::controller('profile', 'ProfilesController');
Route::controller('class', 'ClassesController');
Route::controller('subjects', 'SubjectsController');
Route::controller('teacher', 'TeachersController');
Route::controller('marktype', 'MarkTypeController');
Route::controller('rules', 'RuleController');
Route::get('{slug?}', 'PageController@getView');
});
});
//Admin
//Student
Route::group([
'middleware' => ['auth', 'auth.student'],
'prefix' => 'stu',
'namespace' => 'Stu'
], function () {
Route::get('{slug?}', 'StuController@getView');
});
//Student
//Teacher
Route::group([
'middleware' => ['auth', 'auth.teacher'],
'prefix' => 'educator',
'namespace' => 'Educator'
], function () {
Route::get('edit/{id}', 'AccountController@getEdit');
Route::post('edit/{id}', 'AccountController@saveEdit');
Route::get('account', 'AccountController@getView');
Route::get('class-subject', 'AccountController@getClassSubject');
Route::get('add-mark', 'AccountController@getAddMark');
Route::post('mark', 'AccountController@postAddMark');
Route::get('added', 'AccountController@marksList');
Route::get('statistics', 'AccountController@marksInTable');
Route::get('personalemails', 'PersonalEmailController@getView');
Route::post('personalemails', 'PersonalEmailController@personalEmail');
});
//Teacher
});
Route::get('{slug?}', 'PageController@getView');
对于"未找到页面"404错误,在resources/views/errors/404.blade.php
中创建一个视图,当您收到404错误时,它会显示出来。
来自文件:
自定义HTTP错误页面
Laravel使返回各种HTTP的自定义错误页面变得容易状态代码。例如,如果您希望自定义404 HTTP状态代码,创建resources/views/errors/404.blade.php。此文件将在您的应用
此目录中的视图应命名为与HTTP匹配它们对应的状态代码。
https://laravel.com/docs/5.2/errors#custom-http错误页面
您总是可以更进一步,使用异常处理程序,并通过自定义render()
方法以您希望的方式处理异常
https://laravel.com/docs/5.2/errors#the-异常处理程序
例如,如果您想处理找不到文件的错误,ExceptionsHandler.php
public function render($request, Exception $e)
{
if ($e instanceof SymfonyComponentHttpFoundationFileExceptionFileNotFoundException) {
return response()->view('errors/exceptions/file-not-found', [], 500);
}
return parent::render($request, $e);
}
您可以创建自定义错误404页面。如果有人在浏览器中输入错误的URL,他会看到该页面。
此外,您可以手动将用户重定向到此页面:
abort(404);
更新
我想问题就在这里:
Route::get('{slug?}', 'PageController@getView');
你已经用了三次了,试着把它们都去掉。
问题是,当Laravel没有找到任何路由时,它会使用{slug}
并将其传递给PageController
,因此当您输入http://example.com/sometext
时,您将使用slug = sometext
传递到PageController
。
如果您不想删除它,请检查控制器内的slug
,以及slug是否意味着什么——好。否则,只有abort(404);
和用户将被转移到错误页面。
此外,如果您使用的是5.2.27或更高版本,请从routes.php
中删除web
中间件(它会自动应用,手动应用可能会导致错误和混乱行为)。