次のような URL があります。
<controller>/<action>/param/value
そして、私はそれを次のようにしたい:
param/value
どうすれば達成できますか?
このルールを試してみましたが、大丈夫かどうかわかりません (コントローラーはアカウントで、アクションはインデックスです)。
'user/<user:.*>' => 'account/index/user/test'
次のような URL があります。
<controller>/<action>/param/value
そして、私はそれを次のようにしたい:
param/value
どうすれば達成できますか?
このルールを試してみましたが、大丈夫かどうかわかりません (コントローラーはアカウントで、アクションはインデックスです)。
'user/<user:.*>' => 'account/index/user/test'
私があなたの質問を正しく理解している場合、次のような URL を処理する必要があります。
mysite.domain/user/username123
そして、AccountController の actionIndex を param User で呼び出します。これは(この場合) "username123"に等しくなります。
この場合、以下のルールを試すことができます。
'user/<user:.*>' => 'account/index/<user>'
ただし、アクションが次の場合は、宣言を変更する必要があるかもしれません。
function actionIndex($user){
// code
}
yii は署名の一致しないアクションを [優雅に] 処理しないため、params をアクション署名に入れることは避けたいと思います。アクションが呼び出されない理由を追跡することは、 $_GET が設定されていない理由を判断するよりも難しいでしょう...署名に $user を追加する代わりに、次のようにすることをお勧めしますあなたの行動に従います。
//will always run on /user/<USER:.*>
function actionIndex(){
$user = isset($_GET['user'])?$_GET['user']:NULL;
if(!is_null($user)){
//your user specific account action..
}else{
//handle your error gracefully..
}
}
このアプローチにより、アクションの用途が広がります。URL ルールは次のようになります。
'user/<user:.*>' => 'account/index/user/<user>' //user is defined as a get...
&&幸せなコーディングに役立つことを願っています!