错误消息-Laravel 5.2


Error Messages - Laravel 5.2

有人能告诉我如何让我的"找不到页面"或其他消息吗?例如,如果有人在浏览器中写了一个我的项目中不存在的链接,而不是显示标准错误页面(哇,出了问题,找不到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-异常处理程序

例如,如果您想处理找不到文件的错误,Exceptions'Handler.php

public function render($request, Exception $e)
{
    if ($e instanceof 'Symfony'Component'HttpFoundation'File'Exception'FileNotFoundException) {
        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中间件(它会自动应用,手动应用可能会导致错误和混乱行为)。