我正在尝试处理 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 内部运作的重要信息。
提前感谢任何可以阐明这两个问题的人