2017-12-27 53 views
1

--resourceコマンドを使用して自分のUserControllerを作成しました。Laravel 5.5リソースコントローラーが正しく動作しない

今、私には2つのルートがあります。

Route::get('user/{id}', '[email protected]'); 

Route::get('user/certificate', '[email protected]'); 

私はルート::リソースメソッドを使用していないので、公式ドキュメントは、第2の経路を呼び出すと、第一1をトリガーするべきではないと言います。しかし、私の場合はそうではありません。

ODは、注文の場合、リソースではなく、ルートがそれらの前に宣言されるべきであるとも言います。私もそれを試みた。それでも私はの表示showUserCertificateの代わりにの方法を私にかかります。私はここで何が欠けていますか?

+0

どのようなバージョンのLaravelを使用していますか? – lagbox

+0

5.5、PHPバージョン7.1.8 –

+0

5.5のバージョン正確にはどのバージョン – lagbox

答えて

4

もちろん、showルートに当たっています。リクエストしているURIと一致する最初のルートです。そのルートに定義されているルートパラメータがあり、userで始まり、1つのセグメントが追加されているものと一致します。

user/blah 
user/anything 
user/certificate 

これらはすべてuser/{id}と一致します。一致する最初のルートが使用されます。より具体的なものが最初になるように、これらの2つのルートの順序を逆にします。

更新: フレームワークをアップグレードする必要があります。ルートソートに関連する正確なバージョンでは、バグが導入されました。 5.5.8で修正されています。 Reference to GitHub PR to revert change

+0

申し訳ありませんおそらく私は第2段落で説明に失敗しました。私はユーザー/証明書を宣言した後で/ {id}を宣言しようとしました。それでも、それは問題を解決しませんでした。 –

+0

あなたのアプリケーションで定義したすべてのルートを推測することはできません...これはルーティングの仕組みです。最初に一致したルートが使用され、変更されることはありません。 – lagbox

+0

ルートキャッシュをクリアしようとしましたが、助けになりませんでした。そして、 'user/{id}'が問題の原因となっている唯一のルートです。そのようなことを引き起こす可能性のあるルートは他にありません。 –

0

はいこのシナリオでは、最初のルートは2番目のルートを呼び出すたびに呼び出されます。 2番目のルートの証明書は、最初のコントローラの{id}とみなされます。それが正しい

Route::get('user/{id}', '[email protected]'); 

Route::get('user/certificate', '[email protected]'); 

//ある場合は ルートに変更することができ::取得( 'ユーザー/証明書/ {ID}'、 'UserControllerで@ showUserCertificate')私の答えを投票。

+0

申し訳ありませんが、おそらく第2段落で説明できませんでした。私はユーザー/証明書を宣言した後で/ {id}を宣言しようとしました。それでも、それは問題を解決しませんでした。 –

関連する問題