0

製品と呼ばれるテーブルがある Cakephp Web サイトで動的ルーティングを行いたいと考えています。最初は各製品に対して静的ルーティングを行いましたが、新しい製品が追加されると、問題が発生し、それぞれのルーティング パスを手動で入力する必要があります。非常にユーザーフレンドリーとは思えない新製品..最初に私はやった

Routing::connect('/portfolio/product_name1',array( 'controller'=>'products','action'=>'view',1));
Routing::connect('/portfolio/product_name2',array( 'controller'=>'products','action'=>'view',2));
Routing::connect('/portfolio/product_name3',array( 'controller'=>'products','action'=>'view',3)); 

x製品についても同様です。しかし、誰かがしばらくしてから別の製品を追加した場合、ルートファイルも変更する必要があります。動的に保つことができるオプションはありますか? 私の view() アクションは引数として id を取ります。関数 view() から URL で productname と呼ばれる別のフィールドを取得するにはどうすればよいですか。「名前付き」引数を使用してそれを行うことは可能ですか。ベーカリーですが、私にはすべてがとても混乱しているようです.誰かが私を助けてくれますか?

4

1 に答える 1

0

私には、スラッグルーティングを行いたいようです。基本的に、ルートは次のようにする必要があります

Routing::connect('/portfolio/:slug',
                  array( 'controller'=>'products', 'action'=>'view'),
                  array('pass'=>array('slug'));

私はそれをスラッグと呼んでいますが、それはより身近な用語だから:product-nameです。「cakephp slug」を検索すると、必要なものに関する詳細なガイダンスが見つかります。

とにかく、そのルートは次のようなURLを誘導しportafolio/good-productます

ProductsController->view('good-product')

ビュー アクションでは、その製品名 (スラッグ) を ID に変換できます。そのために、モデルに関数を作成しslugToId、コントローラーから呼び出します

public function view($slug) {
    $productID = $this->Producto->slugToId($slug);
}

モデルでは、単純な検索でそのslugToId機能を実行できます。ええと、その関数がモデルにあることは必須ではありませんが、特に他のモデルでスラッグを実行したい場合は、関数を再利用できます。

これで、逆ルーティングも使用できるようになりました。

$this->redirect(array('controller'=>'products',
                      'action'=>'view',
                      'slug'=>'super-awesome-product'))

url を呼び出しますcake.com/portfolio/super-awesome-product

このスラッグのチュートリアルを読んでください。そこで提案されているほど多くの変更を行う必要はありませんが、良いガイドです。

于 2013-07-03T14:16:04.593 に答える