Laravel 4 でいくつかの例外を処理しようとしていますが、同じコード スニペットがそのうちの 1 つでは機能しますが、他のものでは機能しません。
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 つのスニペットが機能せず、Undefined variable: エラーエラーが発生します。
// 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 の内部構造について、何か重要なことを見落としているのではないかと心配しています。
これら2つの問題に光を当てることができる人に事前に感謝します