0

これが私の質問です。ユーザーが自分でコンテンツを追加するサイトを開発しています。そのコンテンツは、db から抽出される ID および/またはエイリアスによって識別子を取得します。目標は、そのコンテンツを含むすべてのページのビューとコントローラーを作成することではありません。それらを求めるべきではありません。代わりに、適切なコンテンツを定義する URL 部分を取得する actionIndex() で URL を処理し、さらにそれをテンプレートにロードします。例えば:

  1. メインセクションの製品があります。そのビューは

    /ビュー/製品/index.php

  2. コントローラーがあります:

    ProductsController は Controller を拡張します

  3. デフォルトのメソッド actionIndex() があります

したがって、次のような URL を取得すると、次のようになります。

/mysite/Products/some_product_alias

... actionIndex() で処理する必要があるため、404 ページに移動するのではなく、エイリアス "some_product_alias" によってデータを取得して製品テンプレートにロードします (/views/Products/index.php または別のページ)。同時に、サイトのメイン セクションであり、メイン メニューである静的ページの controller/actionMethod を定義する可能性を維持する必要がありました。つまり、動作するはずです。コントローラーで既存の actionMethod を見つけることができれば、それを呼び出すだけです。見つからない場合は、DB 内の URL から抽出されたエイリアスを探します。そこに存在する場合は、データを取得してテンプレートにロードします。確かに、このタスクは非常に扱いやすいですが、残念ながら私は Yii の初心者であり、まだその方法がわかりません :( 助けていただければ幸いです!

4

2 に答える 2

0

ここにあるルートのパラメータ化に関するYiiのドキュメントを調べる必要があります

その要点は、メインの構成ファイルを変更し、このルートをコントローラー/アクションではなくコントローラー/ {エイリアス}にマップする必要があるということです。デフォルトのビューアクションを使用して、次の行に何かを追加します。

  'rules'=>array(
    '<controller:\w+>/<id:\d+>'=>'<controller>/view',
  ),

これにより、Products / 15のようなルートがマップされ、アクションProducts / viewが使用され、GETパラメーターIDが15に設定されます。

于 2012-09-22T09:25:27.533 に答える
0

答え (その最初の部分) は、DeadAlready が語ったこととほとんど同じです。しかし、ここで何かを追加する必要があります。1. エイリアスのルールを urlManager に設定する必要があります (はい!):

Product/<alias:\w+>' =>  'product/index'

コントローラーで actionIndex() を呼び出し、エイリアス名でメソッドを検索しないことに注意してください。2. 変数 $alias を指定する必要があります (この名前は、パターン部分文字列と同じです。つまり、"$alias"/"

function actionIndes($alias){
   ...handle event...
}

その後、イベントを処理して DB からデータを取得できます。

于 2012-09-24T18:16:57.087 に答える