2

私はこのようなURLを持っています

example.com/model/id

example.com/image/123 (デフォルトのルール)

私はそれを次のように書き直します:

example.com/category/123-this_is_encoded_title.html

私の画像モデルには次の属性があります。

  • ID
  • 題名
  • カテゴリー ...

モデルから URL にカテゴリを追加する必要があります。URLに動的なカテゴリ名を追加するにはどうすればよいですか?

4

1 に答える 1

0

すでにデフォルトの 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 の提案に従ってください。

于 2012-10-05T05:55:58.793 に答える