74347


Laravel 6.18.24, PHP 7.4を使用しています。

`resources/views/errors/404.blade.php` のファイルは作成済みで、 `abort(404);`
などを適当なコントローラに仕込んでアクセスすると、きちんと「ページが見つかりません」の独自404ページは表示されます。

しかし、存在しないURL（web.phpで定義していないディレクトリやファイル）にアクセスしようとすると、

[code]

    ErrorException (E_ERROR)
    Undefined variable: val (View: /sample/resources/views/includes/sidebar.blade.php)
    (View: /sample/resources/views/includes/sidebar.blade.php)
    
[/code]

のような、本来アクセスが想定されていないビューにアクセスされて変数の未定義エラーとなってしまいます。  
（独自404ページでsidebar.blade.phpは使用していません。）

web.phpで定義していないURLにアクセスしたら、自動的に404になるものと思っていましたが違うのでしょうか。

<https://www.hypertextcandy.com/laravel-tutorial-error-handling>

少し古い記事ですが、こちらのページでは、いちいち『すべてのコントローラーメソッドで ①フォルダデータを取得する、②取得できなかったら abort(404)
を呼ぶ、という一連の処理を記述する』代わりに、『ルートモデルバインディング』として

[code]

    // web.php
    Route::get('/folders/{folder}/tasks', 'TaskController@index')->name('tasks.index');
    
[/code]

[code]

    public function index(Folder $folder)
    {
        // 略
    }
    
[/code]

のような例を紹介してくれていますが、IDが存在するかとかモデルが存在するか変数が定義済みかとかキーワードとか型指定とかも気にせず、とにかく「定義されていないURLにアクセスしたら一律、独自404ページを表示する」のような解決方法はないものでしょうか。

web.phpはすべて記載することはできませんが、

[code]

    Route::get('/', 'SettingsController@index')->middleware(['auth', 'payment'])->name('index');
    
[/code]

とか

[code]

    // ニュース
    Route::prefix('news')->name('news_')->middleware(['auth', 'payment'])->group(function () {
        Route::get('/', 'NewsController@index')->name('index');
        Route::post('/', 'NewsController@index')->name('index');
        Route::get('/{id}', 'NewsController@show')->name('show');
    });
    
[/code]

のようにその他沢山のルートが定義済みです。

足りない情報がありましたらご指摘ください。チームで開発をしているため気づかない部分で何らかのエラーハンドリングが上書きされている可能性もあるかと思うので、チェックするべき場所などが分かればそちらの情報も開示するようにいたします。大変お手数ではありますが、どなたかお力添えいただけるようでしたら助かります。。。


CC BY-SA 4.0
2021-03-01T13:29:43.427
74346
2021-03-02T01:52:12.470
2021-03-02T01:52:12.470
43186
43186
question
php laravel
Laravel6で存在しないURLへアクセスした場合に独自404エラーページを表示したい、今はErrorException (E_ERROR) Undefined variable: が表示されてしまう。


404.blade.php はどのようなBladeを @extends していますか？  
そのBladeの中で sidebar.blade.php を @include しているのではないかと思いました。


CC BY-SA 4.0
2021-03-01T14:36:57.200
74347
2021-03-01T14:36:57.200
44069
74346
answer