laravel路由和404错误

时间:2013-12-09 15:41:03

标签: routing laravel laravel-4

我想指定如果在现有路线以外的网址中输入任何内容(在routes.php中,则显示404页面。

我知道这个:

App::abort(404);

但是如何指定除定义路线以外的所有其他部分?

4 个答案:

答案 0 :(得分:29)

您可以将其添加到filters.php文件中:

App::missing(function($exception)
{
    return Response::view('errors.missing', array(), 404);
});

创建errors.missing视图文件以向他们显示错误。

另请查看Errors & Logging docs

修改

如果需要将数据传递给该视图,则第二个参数是您可以使用的数组:

App::missing(function($exception)
{
    return Response::view('errors.missing', array('url' => Request::url()), 404);
});

答案 1 :(得分:5)

我建议把它放到你的app/start/global.php中,因为Laravel默认处理它(尽管filters.php也可以)。我通常使用这样的东西:

/*
|--------------------------------------------------------------------------
| Application Error Handler
|--------------------------------------------------------------------------
|
| Here you may handle any errors that occur in your application, including
| logging them or displaying custom views for specific errors. You may
| even register several error handlers to handle different types of
| exceptions. If nothing is returned, the default error view is
| shown, which includes a detailed stack trace during debug.
|
*/

App::error(function(Exception $exception, $code)
{
    $pathInfo = Request::getPathInfo();
    $message = $exception->getMessage() ?: 'Exception';
    Log::error("$code - $message @ $pathInfo\r\n$exception");

    if (Config::get('app.debug')) {
        return;
    }

    switch ($code)
    {
        case 403:
            return Response::view('errors/403', array(), 403);

        case 500:
            return Response::view('errors/500', array(), 500);

        default:
            return Response::view('errors/404', array(), $code);
    }
});

然后在errors内创建一个/views文件夹,并将错误页面内容放在那里。正如Antonio提到的,您可以在array()内传递数据。

我从https://github.com/andrewelkins/Laravel-4-Bootstrap-Starter-Site

借用了这个方法

答案 2 :(得分:1)

对于使用Laravel 5的人来说,views目录中有一个errors文件夹。你只需要在那里创建一个404.blade.php文件,当没有为url指定路由时它将呈现这个视图

答案 3 :(得分:0)

这是我的方法,仅用于使用模板布局显示错误404。只需将以下代码添加到/app/start/global.php文件

即可
App::missing(function($exception)
{
    $layout = \View::make('layouts.error');
    $layout->content = \View::make('views.errors.404');
    return Response::make($layout, 404);
});