1

私は CakePHP を初めて使用します。アプリケーションで URL を書き換えたいと考えています。

一部のコントローラーについては、ナビゲートしたい。

`controller/action/id/slug`.

このため、ルールを次のように記述します。

Router::connect(
        '/products/:id/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('id'), 'id' => '[0-9]+')
);

私はリンクを書いています..

echo $this->Html->link($record['Category']['name'], array('controller' => 'categories', 'action' => 'index', 'slug' => $record['Category']['slug']), array('escape' => false)); 

質問

  1. 上記のコントローラーとアクション、つまり製品とビューの応答へのルールのみの適用です。?

  2. URL (ホバー時) がcontroller/action/slug:slug_nameではなくとして表示されるのはなぜcontroller/action/slug_nameですか?

  3. action/id/slug_name同じコントローラーで、送信した/action場所や slug のみを使用する場所など、異なる URL 書き換えを使用したいと考えていますaction/slug_name。すべてに対して単一のルールのみが記述されていますか? または、コントローラーとアクションごとに個別のルールを定義する必要があります。

  4. すべてのコントローラーにも共通のルールを作成しますか?

もっと説明してください。ドキュメントを読み込もうとしましたが、少し混乱しました。私のパラメーターが、私が言及したすべての種類のリクエストを取得する方法。

今書いてください私はパラメータを取得するために単純な方法だけを使用しています

 controller/action/param1:param_val1/param2:param_val2,
 echo $this->Html->link('Val', array('controller' => 'categories',
 'action' => 'index', 'param1' => param_val1, 'param2' => param_val2,),
 array('escape' => false));

等々。しかし、私はより良い、より速い動きとともに、かなり明確で美しいURLを持ちたいと思っています. slug を渡すように、findBySlug を直接取得するか、何らかの方法でより適切に取得したいと考えています。

4

1 に答える 1

3

1) はい、Router::connect ルールを作成すると、1 つのケースにのみ適用されます。つまり、1 つの URL またはグループ OS URL に適用されます。

2) このようにすればよい

echo $this->Html->link($record['Category']['name'], array('controller' => 'categories', 'action' => 'index',  $record['Category']['slug']), array('escape' => false));

3) URL の構造が異なる場合にのみ、これらの URL のルールを作成する必要があります。

あなたの例によると、ルールは次のようになります

# only for action/slug_name case
Router::connect('/products/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('slug'), 'slug'=>'[a-z_]+'));
# for action/id/slug_name case
Router::connect('/products/:id/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('id','slug'), 'id' => '[0-9]+','slug'=>'[a-z_]+'));

4) CakePHP の HTML コンポーネントを使用せずに URL を記述することをお勧めします。悪いからではなく、はるかに速くて簡単だからです

これを行う代わりに

controller/action/param1:param_val1/param2:param_val2,
 echo $this->Html->link('Val', array('controller' => 'categories','action' => 'index', 'param1' => param_val1, 'param2' => param_val2,),array('escape' => false));

これを行う方がはるかに優れています:

controller/action/param_val1/param_val2

 echo 'controller/action/'.$param_val1.DS.$param_val2;

また、SEOにも優れており、URLフレンドリーです

于 2012-10-17T06:51:00.167 に答える