0

我正在尝试处理 Laravel 4 中的一些异常,并且相同的代码片段适用于其中一个,但不适用于其他。

我声明了一个添加到 composer.json 的 Exceptions.php 文件。

在 Exceptions.php 中,我声明了以下内容:

use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
Class NotAllowedException extends Exception {};

Exceptions.php 中的以下处理程序正常工作:

// snippet 1
App::error(function(NotAllowedException $e, $code, $needed)
{
return Response::make(View::make('special.error')->with('error', array('headline' => 'Not Allowed',
                          'description' =>'<p>Your user has not enough privileges to perform the requested operation.</p>')), 401);

});

当我尝试做同样的事情来处理 HttpNotFoundExceptions 和 ModelNotFoundExceptions 时,以下 2 个片段是第一个片段的副本不起作用并产生一个未定义的变量:错误错误。

// snippet 2
App::error(function(ModelNotFoundException $e)
{
return Response::make(View::make('special.error')->with('error', array('headline' =>'Not Found',
                'description' => '<p>It seems you have tried to access a page that does not exist.</p>')), 404);
});


// snippet 3
App::error(function(NotFoundHttpException $e)
{
return Response::make(View::make('special.error')->with('error', array('headline' =>'Not Found',
                'description' => '<p>It seems you have tried to access a page that does not exist.</p>')), 404);
});

我只能通过将其放入 global.php 来使 NotFoundHttpException 工作:

App::missing(function($exception)
{
return Response::make(View::make('special.error')->with('error', array('headline' =>'Not Found',
                'description' => '<p>It seems you have tried to access a page that does not exist.</p>')), 404);
});

但是我不知道为什么如果我把它放在那里它会起作用,如果我把它放在 Exceptions.php 中它就不起作用。

尝试将片段 2 和 3 放在 global.php 中会在这两种情况下产生内部服务器错误。

回顾一下,问题

  • 我想我正在按照 Laravel4 的文档处理 ModelNotFoundException ;什么我做错了什么/如何使它工作?
  • 为什么 App::missing 仅在我将其放入 global.php 时才起作用?我担心我可能会遗漏一些关于 Laravel 内部运作的重要信息。

提前感谢任何可以阐明这两个问题的人

4

0 回答 0