2016-04-14 21 views
0

この質問は、エラーの一部だけがエラーそのものを表示している理由をより詳しく説明しています(誰かがエラーも解決できる場合は素晴らしいでしょう)。Laravelにエラーが発生しない原因

しかし、私はLaravelにエラー通知をメールし、それを記録するロギング機能を持っています。 (確かに、それはその目的に役立つ傾向がありますが、おそらくベストプラクティスではありません)。以下に示すように、エラーメールを送信するための私のコードは... Handler.php

public function report(Exception $e) 
{ 
    \Mail::send('emails.error', ['error' => $e], function ($m) use ($e) { 


     $m->from('[email protected]', 'MMC API | Laravel Error '); 

     $m->to('[email protected]') 
     ->cc('[email protected]') 
     ->subject($e->getMessage()); 
    }); 

    parent::report($e); 
} 

リソース\電子メール\ビュー\ error.blade.php

<p><strong>Message: </strong>{{ $error->getMessage() }}</p> 
<p><strong>File: </strong>{{ $error->getFile() }}</p> 
<p><strong>Trace: </strong>{{$error->getTraceAsString()}}</p> 
\

例外です

メールのgetMessage()セクションのメッセージが表示されていません(下記参照)...

Message: 
File: C:\api\vendor\laravel\framework\src\Illuminate\Routing\RouteCollection.php 
Trace: 
    #0 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Router.php(823): Illuminate\Routing\RouteCollection->match(Object(Illuminate\Http\Request)) 
    #1 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Router.php(691): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request)) 
    #2 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Router.php(675): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) 
    #3 C:\api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(246): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) 
    #4 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request)) 
    #5 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(52): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
    #6 C:\api\vendor\barryvdh\laravel-cors\src\HandleCors.php(34): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) 
    #7 [internal function]: Barryvdh\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure)) 
    #8 C:\api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) 
    #9 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
    #10 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
    #11 C:\api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php(44): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) 
    #12 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure)) 
    #13 C:\api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(124): call_user_func_array(Array, Array) 
    #14 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request)) 
    #15 C:\api\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
    #16 [internal function]: Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request)) 
    #17 C:\api\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(103): call_user_func(Object(Closure), Object(Illuminate\Http\Request)) 
    #18 C:\api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(132): Illuminate\Pipeline\Pipeline->then(Object(Closure)) 
    #19 C:\api\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(99): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) 
    #20 C:\api\public\index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) 
    #21 {main} 

クロスドメインAPIを有効にするために私が使用するBarryvdh\Cors\HandleCors-や、おそらくWebクローラーが私が許可しているものとは異なるルートを突き抜こうとしていると、何か問題があったようです。しかし、私の元の質問については

私はgetMessage()

ボーナス質問とそれを得ることができたことにより、メッセージを表示せずにエラーを持っていることも可能である:は、それは私が「ルート・エラーを診断することが可能です私は利用できる限られた情報を得ているのですか?

答えて

1

あなたの元の質問に対する答えははいです。メッセージを持たない例外を持つことができます。

あなたのボーナスの質問に対する答えは「はい」です。現在の情報に基づいて推測される推測を得ることができます。これを行うと、実際には元の質問に対する答えが表示されます。

stacktraceから、(行番号0から)最後に呼び出されたメソッドがIlluminate\Routing\RouteCollection->matchであったことがわかります。 the codeに行き、この方法を見ると、一致するルートがない場合は、throw new NotFoundHttpException;が呼び出されます。

このメソッドによって明示的にスローされた唯一のExceptionであることと、メッセージを設定せずにスローされるという事実を考えれば、これはあなたのエラーであると推測されます。

基本的に誰かが存在しなかったルートに移動しようとしました。

関連する問題