web-dev-qa-db-ja.com

Laravel 5ルートは定義されていませんが、定義されていますか?

これがどのように機能するかについて少し混乱しています。しかし、Route [/preferences/1] not definedエラーが発生しています。

Routes.phpには次のものがあります。

Route::patch('/preferences/{id}', 'UserController@update');

そして、ビューファイル(account/preferences.blade.php)には次のものがあります:

{!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => '/preferences/' . Auth::user()->id]) !!}

ルートが存在しないというエラーが表示されます。私はこのトピックに関するドキュメントを誤解していると思いますが、私の意見では、与えられたパラメータでPATCHリクエストのルートを定義し、ビューでこれを正しく設定しました。

ここで見下ろしているのは何ですか?

47
Ben

フォームを開くときに['route' => 'someroute']を実行すると呼び出されるroute()メソッドは、named routeと呼ばれるものを必要とします。ルートに次のような名前を付けます。

Route::patch('/preferences/{id}',[
    'as' => 'user.preferences.update',
    'uses' => 'UserController@update'
]);

つまり、ルートの2番目の引数を配列にして、ルート名(as)と、ルートがヒットしたときの処理(uses)の両方を指定します。

次に、フォームを開くと、ルートを呼び出します。

{!! Form::model(Auth::user(), [
    'method' => 'PATCH',
    'route' => ['user.preferences.update', Auth::user()->id]
]) !!}

これで、パラメーターのないルートの場合、'route' => 'routename'を実行できますが、パラメーターがあるため、代わりに配列を作成し、パラメーターを順番に指定します。

とはいえ、現在のユーザーの設定を更新しているように見えるため、現在ログインしているユーザーのIDをハンドリングコントローラーに確認させ、その更新に基づいて更新することをお勧めします-IDを送信する必要はありませんユーザーが他のユーザーの設定も更新する必要がある場合を除き、URLとルートで使用します。 :)

78
Joel Hinz

このスレッドは古いですが、最初に登場したスレッドなので、私もidが私のソリューションを共有していると思いました。 routes.phpファイルに名前付きルートがあることは別として。このエラーは、ルートファイルに重複したURLがある場合にも発生する可能性がありますが、異なる名前では、このシナリオでエラーが誤解を招く可能性があります。例

Route::any('official/form/reject-form}', 'FormStatus@rejectForm')->name('reject-form');  


Route::any('official/form/accept-form', 'FormStatus@acceptForm')->name('reject-form');

名前を変更することで問題は解決します。コピーの貼り付けと疲労により、この問題が発生します:)。

25
Bantu

ルートが定義されていない場合、web.phpルーティングファイルを確認してください。

Route::get('/map', 'NavigationController@map')->name('map'); // note the name() method.

次に、ビューでこのメソッドを使用できます。

<a class="nav-link" href="{{ route('map') }}">{{ __('Map') }}</a>

PS:__( 'Map')は "Map"を現在の言語に翻訳します。

また、artisanコマンドで表示できるルートの名前のリスト:

php artisan route:list
6
ALeX inSide

私は同じ問題を抱えていて、最近解決策を見つけました。

ルートがむしろroute :: group内にあるかどうかを確認する必要があります

ここみたいに:

Route::group(['prefix' => 'Auth', 'as' => 'Auth.', 'namespace' => 'Auth', 'middleware' => 'Auth']

その場合は、ビューファイルで使用する必要があります。ここみたいに:

!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => 'Auth.preferences/' . Auth::user()->id]) !!}
3
Ilyas Kuzu

フォームではなくビューを返すため、私の場合は少し異なります。メソッド->name('route')を追加します。

MyView.blade.phpは次のようになります。

<a href="{{route('admin')}}">CATEGORIES</a>

そして、web.php routesファイルは次のように定義されます:

Route::view('admin', 'admin.index')->name('admin');
3
entoniperez

私はLaravel 5.7を使用して、上記のすべての回答を試しましたが、何もその場でヒットしているようには見えませんでした。

私にとっては、Laravelによって作成されたキャッシュファイルを削除するという、かなり単純な修正でした。
私の変更は反映されていないようでした。したがって、私のアプリケーションはルートを見ていませんでした。

少しやり過ぎですが、次のコマンドを使用してすべてのキャッシュを同時にリセットすることにしました。

php artisan route:clear
php artisan view:clear
php artisan cache:clear

ここでの主なものは、bootstrap/cache/routes.phpファイルを削除する最初のコマンドです。
2番目のコマンドは、storage/framework/cacheフォルダーに格納されているビューのキャッシュファイルを削除します。
最後に、最後のコマンドはアプリケーションキャッシュをクリアします。

2
JustCarty

私の場合、解決策は簡単でした:

route.phpファイルの最初にルートを定義しました。

名前付きルートを一番下に移動した後、私のアプリは最終的にそれを見ました。どういうわけか、ルートの定義が早すぎたということです。

2
Peter

サイドノート:

同様の問題が発生し、アクションメソッドが見つかりませんというエラーが何度も発生しますが、コントローラーで定義されていることは明らかです。

問題はコントローラーではなく、routes.phpファイルのセットアップ方法にあります

Route.phpファイルでコントローラクラスをリソースとして設定したとします

Route::resource('example', 'ExampleController');

「/ example」には、すべてのRESTfulリソースがここにリストされます。 http://laravel.com/docs/5.0/controllers#restful-resource-controllers

しかし、今、あなたは、例えば「action」=>「ExampleController @ postStore」の形で何らかの定義を持ちたいなら、このルートを(route.phpファイルで)変更しなければなりません:

Route::controller('example', 'ExampleController');
1
star18bit

コマンドに注意してください

php artisan route:list

または、さらにフィルターダウンリストを取得するには

php artisan route:list | grep your_route|your_controller

4列目は、登録されているルートの名前を示します(通常はRoute :: resourceによって生成されます)

0