【问题标题】:Laravel 4 - Handling 404 ErrorsLaravel 4 - 处理 404 错误
【发布时间】:2013-12-08 12:10:07
【问题描述】:

我知道用 laravel 4 处理 404 错误是写在 app/start/global.php :

App::missing(function($exception)
{
    return Redirect::route('404_Error');
});

但实际上我想使用这条路线:

Route::get('error', array(
    'as' => '404_Error',
    'uses' => 'ErrorController@get404Error'
));

但要保持在同一个 URL。

例子:

我现在的网址是localhost:8000/users/blat(404 错误)。我不想重定向到错误页面。我想在这个网址看到ErrorController@get404Error

非常感谢。

【问题讨论】:

  • 我不敢相信这个问题没有答案。真的只能用简单的视图而不是控制器动作来响应吗?

标签: php frameworks routing laravel laravel-4


【解决方案1】:

你可以试试这样的:

App::missing(function($exception)
{
    return App::make('ErrorController')->get404Error($exception);
});

你的ErrorController

class ErrorController extends BaseController {
    //...
    public function get404Error($exception)
    {
        //...
        $data = ...;
        return View::make('error_view')->with('data', $data);
    }
}

【讨论】:

    【解决方案2】:

    您可以创建ErrorController 类的实例并调用其get404Error 方法。这样,您也将拥有来自 BaseController 类的变量,并且路线将保持不变。

    App::missing(function($exception)
    {
        $errorController = new ErrorController();
        return $errorController->get404Error();
    });
    

    【讨论】:

      【解决方案3】:

      如果您使用不同的路线,它将重定向到该路线,您可能需要立即呈现您的视图,IMO 这是保持您所在位置并且不更改您的网址的唯一方法:

      App::missing(function($exception)
      {
          return View::make('404_Error');
      });
      

      【讨论】:

      • 实际上,我在“BaseController”中有一些变量需要用于错误...另一个想法?
      • 您需要显示更多代码,您可以做很多事情,例如使用 View Composers,但我们可以在不查看您的实际代码的情况下做得更好。
      猜你喜欢
      • 2016-06-08
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 2016-11-16
      • 2013-11-24
      相关资源
      最近更新 更多