これがどのように機能するかについて少し混乱しています。しかし、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リクエストのルートを定義し、ビューでこれを正しく設定しました。
ここで見下ろしているのは何ですか?
フォームを開くときに['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とルートで使用します。 :)
このスレッドは古いですが、最初に登場したスレッドなので、私も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');
名前を変更することで問題は解決します。コピーの貼り付けと疲労により、この問題が発生します:)。
ルートが定義されていない場合、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
私は同じ問題を抱えていて、最近解決策を見つけました。
ルートがむしろroute :: group内にあるかどうかを確認する必要があります
ここみたいに:
Route::group(['prefix' => 'Auth', 'as' => 'Auth.', 'namespace' => 'Auth', 'middleware' => 'Auth']
その場合は、ビューファイルで使用する必要があります。ここみたいに:
!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => 'Auth.preferences/' . Auth::user()->id]) !!}
フォームではなくビューを返すため、私の場合は少し異なります。メソッド->name('route')
を追加します。
MyView.blade.php
は次のようになります。
<a href="{{route('admin')}}">CATEGORIES</a>
そして、web.php
routesファイルは次のように定義されます:
Route::view('admin', 'admin.index')->name('admin');
私はLaravel 5.7を使用して、上記のすべての回答を試しましたが、何もその場でヒットしているようには見えませんでした。
私にとっては、Laravelによって作成されたキャッシュファイルを削除するという、かなり単純な修正でした。
私の変更は反映されていないようでした。したがって、私のアプリケーションはルートを見ていませんでした。
少しやり過ぎですが、次のコマンドを使用してすべてのキャッシュを同時にリセットすることにしました。
php artisan route:clear
php artisan view:clear
php artisan cache:clear
ここでの主なものは、bootstrap/cache/routes.php
ファイルを削除する最初のコマンドです。
2番目のコマンドは、storage/framework/cache
フォルダーに格納されているビューのキャッシュファイルを削除します。
最後に、最後のコマンドはアプリケーションキャッシュをクリアします。
私の場合、解決策は簡単でした:
route.php
ファイルの最初にルートを定義しました。
名前付きルートを一番下に移動した後、私のアプリは最終的にそれを見ました。どういうわけか、ルートの定義が早すぎたということです。
サイドノート:
同様の問題が発生し、アクションメソッドが見つかりませんというエラーが何度も発生しますが、コントローラーで定義されていることは明らかです。
問題はコントローラーではなく、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');
コマンドに注意してください
php artisan route:list
または、さらにフィルターダウンリストを取得するには
php artisan route:list | grep your_route|your_controller
4列目は、登録されているルートの名前を示します(通常はRoute :: resourceによって生成されます)