

Laravelのrouteで確認したいことがあります。  
下記エラーは解消されましたがなぜ解消されたかわかりません。

[code]

    Route [tasks.show] not defined. tasklist/resources/views/tasks/index.blade.php
    
[/code]

tasks.showをusers.showに変更したら解消されます。  
tasks.showとはtasksフォルダの中のshow.blade.phpだと思ってました。  
私の環境にusersフォルダは存在してません。

このtasks.showのtasksとは何でしょうか？

web.php

[code]

    Route::get('/', 'TasksController@index');
    
    // create: 新規作成用のフォームページ
    Route::get('tasks/create', 'TasksController@create')->name('tasks.create');
    
    // ユーザ登録
    Route::get('signup', 'Auth\RegisterController@showRegistrationForm')->name('signup.get');
    Route::post('signup', 'Auth\RegisterController@register')->name('signup.post');
    
    // ログイン認証
    Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
    Route::post('login', 'Auth\LoginController@login')->name('login.post');
    Route::get('logout', 'Auth\LoginController@logout')->name('logout.get');
    
    // ユーザ機能
    Route::group(['middleware' => ['auth']], function () {
        Route::resource('users', 'UsersController', ['only' => ['index', 'show']]);
        Route::resource('tasks', 'TasksController', ['only' => ['store', 'destroy']]);
    
[/code]

TasksController.php

[code]

    public function show($id)
        {
            $task = Task::find($id);
    
            return view('tasks.show', [
                'task' => $task,
            ]);
        }
    
[/code]


CC BY-SA 4.0
2020-01-03T02:49:09.847
61942
2022-06-08T17:04:40.527
2020-01-04T07:28:07.403
2376
37276
question
laravel
Laravelのrouteエラー: Route [tasks.show] not defined. がなぜ解消されたかわからない


ルーターで設定されているルートの名前です。

ルート設定ファイル(routes/web.phpなど)を確認してみてください。`->name('users.show')`のように定義されているルートはないでしょうか。

* * *

ルーターファイルの追記を受けて回答も追記します。

この場合、

>
[code]

>         Route::resource('users', 'UsersController', ['only' => ['index',
> 'show']]);
>  
[/code]

で ルート"`users.index`"と"`users.show`"が登録されています。

> tasks.showをusers.showに変更したら解消されます。

はこのためです。(おそらくエラーが消えるだけで理想の挙動になっているわけではないのではないでしょうか)

`Route::resource`はCRUDを実現するルートを自動登録しますが、すべてが必要ではないことも多いので、`only`でホワイトリスト化できます。ここではindexとshowですね。

[LaravelでRoute::resourceを使うときに気をつけること -
Qiita](https://qiita.com/sympe/items/9297f41d5f7a9d91aa11)  
[コントローラ 6.x
Laravel](https://readouble.com/laravel/6.x/ja/controllers.html?header=%25E3%2583%25AA%25E3%2582%25BD%25E3%2583%25BC%25E3%2582%25B9%25E3%2582%25B3%25E3%2583%25B3%25E3%2583%2588%25E3%2583%25AD%25E3%2583%25BC%25E3%2583%25A9%25E3%2583%25BC%25E3%2581%25B8%25E3%2581%25AE%25E3%2583%25AB%25E3%2583%25BC%25E3%2583%2588%25E8%25BF%25BD%25E5%258A%25A0)

一方でtasksに関するルートは

>
[code]

>        Route::resource('tasks', 'TasksController', ['only' => ['store',
> 'destroy']]);
>  
[/code]

で登録されています。(createだけわかれちゃってますがとりあえず無視します)  
usersと同様に、`tasks.store`と`tasks.destroy`のみが登録されているようです。当然ながら`show`は入ってないので、`tasks.show`というルートは登録されていません。

つまりは、ここに`show`を追加すれば、本来の解決が可能でしょう。


CC BY-SA 4.0
2020-01-03T06:37:43.703
61944
2020-01-04T07:49:12.733
2020-01-04T07:49:12.733
2376
2376
61942
answer