2

userコントローラーがあり、その中にaction_index(), action_login(),action_logout() action_profile($userid) メソッドがあるとします。というルーティングを作りたい

www.mysite.com/user/xxxx

URLの一部をチェックし、xxxx(login、logout、index) のいずれでもない場合は、action_profile(xxxx)メソッドを呼び出します。

今、私はこのようにしています:私のルーティングはすべてのwww.mysite.com/user/xxxxタイプのリクエストをルーティングし、それがメソッド名action_indexかどうかをチェックします。xxxxメソッド名でない場合は、呼び出しますaction_profile(xxxx)

しかし、私はそれがより良い方法で可能だと思います。どうすればもっとうまくできますか?

4

2 に答える 2

5

うーん、あなたが求めていることを理解しているかどうかわかりません。laravel のルートは最初の一致に基づいています。

したがって、次を に追加するだけですroutes.php

Route::get('user/(:num)', 'user@profile');
Route::controller('user');

最初の行は、任意の数値であるユーザーコントローラーuser/xxxへのルーティング用です。2 つ目は、他の URI ( ) を対応するユーザー コントローラーのメソッドにマップします。つまり、 、 などに自動的にマップされます。action_profile()xxxuser/***/***user/loginaction_login()user/registeraction_register()

于 2012-11-18T02:55:14.773 に答える
3

この場合の使用は避けることをお勧めしRoute::controller()ます。場合によっては使用しても問題ありませんが、ルートにマッピングする方が良いでしょう。

あなたはそのようにすることができます。

Route::get('user', 'user@index');
Route::get('user/(:num)', 'user@profile');
Route::get('user/(:any)', 'user@(:1)');

または、最後のルートをもう少し厳しくすることもできます。

Route::get('user/(login|logout)', 'user@(:1)');

避けることをお勧めする私の理由Route::controller()は、一部のコンテンツに重複が作成されるためです. たとえば、yoursite.com/userwill by duplicated on yoursite.com/user/index. これは、検索エンジンの最適化に悪影響を及ぼす可能性があります。

アクションにマッピングすることで、さらなる柔軟性と制御が可能になります。

于 2012-11-18T11:27:37.780 に答える