0

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つの問題に光を当てることができる人に事前に感謝します

4

0 に答える 0