私はこのようなURLを持っています
example.com/model/id
example.com/image/123 (デフォルトのルール)
私はそれを次のように書き直します:
example.com/category/123-this_is_encoded_title.html
私の画像モデルには次の属性があります。
- ID
- 題名
- カテゴリー ...
モデルから URL にカテゴリを追加する必要があります。URLに動的なカテゴリ名を追加するにはどうすればよいですか?
私はこのようなURLを持っています
example.com/model/id
example.com/image/123 (デフォルトのルール)
私はそれを次のように書き直します:
example.com/category/123-this_is_encoded_title.html
私の画像モデルには次の属性があります。
モデルから URL にカテゴリを追加する必要があります。URLに動的なカテゴリ名を追加するにはどうすればよいですか?
すでにデフォルトの CUrlManager ルールを使用しているようです。
以下のルールをルール リストの一番上に追加します。(コントローラーIDはimageであると想定しています)
'<category:\w+>/<id:\d+>-<title:\w+>.html'=>'image/view',
これに加えて、すべての場所で URL の作成を変更する必要があります。URL パラメータとしてタイトルとカテゴリの値を渡す必要があります。
元:
//Cleanup the title and category
$model->title = preg_replace("/[^\w+]/", '_', $model->title);
$model->category = preg_replace("/[^\w+]/", '_', $model->category);
//ex 1:
$this->redirect(array('view',
'id'=>$model->id,
'title'=>$model->title,
'category' => $model->category
));
//ex 2:
echo CHtml::link('Title', array('view',
'id'=>$data->id,
'title' => $data->title,
'category' => $data->category
));
//ex 3:
$this->createUrl('image/view', array(
'id'=>$image->id,
'title'=>$image->title,
'category' => $image->category
));
この回答は、何をする必要があるかを説明しています。
コードのリファクタリングについては、@dInGd0nG の提案に従ってください。