2

これにより、/en/etcetcetc のような静的なプレフィックスを付ける代わりに、簡単に動的な入力変数を取得できますが、問題はすべてのコントローラーがブロックされることです。すべてがインデックス/インデックスに移動します。

質問: このルールで、現在のようにエバーティを許可するが、http://site.com/donotcatch/meとhttp://site.com/iamnotbelongstodynamic1/blablaが含まれているかどうかを追跡しないようにするにはどうすればよいですか?

  protected  function _initRoutes()
  { 
     ...
      $dynamic1 = new Zend_Controller_Router_Route(
            '/:variable0/:variable1',
            array(
                'controller' => 'index',
                'action'     => 'index'),
                array(
                      'variable0' => '^[a-zA-Z0-9_]*$',
                      'variable1' => '^[a-zA-Z0-9_]*$',
                    )
            );

ファローアップ:

通常、私は常にできると信じています。したがって、dynamic1 が他の静的コントローラーと干渉しない場合、次のように行うことができます。

  // http://site/yeswecan/blabla
  // variable0 = yeswecan
  // variable1 = blabla
  $dynamic1 = new Zend_Controller_Router_Route(
        '/:variable0/:variable1',
        array(
            'controller' => 'index',
            'action'     => 'index'),
            array(
                  'variable0' => '^[a-zA-Z]*$',
                  'variable1' => '^[a-z0-9_]*$',
                )
        );


  // http://site/ajax/whatever...
  // solves it
  $dynamic2 = new Zend_Controller_Router_Route(
        '/ajax/:variable0',
        array(
            'controller' => 'ajax',
            'action'     => ''
            ),
            array(
                  'variable0' => '^[a-zA-Z0-9_]*$',
                )
        );

  // http://site/order/whatever...
  // solves it
  $dynamic3 = new Zend_Controller_Router_Route(
        '/order/:variable0',
        array(
            'controller' => 'order',
            'action'     => ''),
            array(
                  'variable0' => '^[a-zA-Z0-9_]*$',
                )
        ); 

ノート:

  • それでもコントローラーは失敗します。たとえば、 http://site/ajax/whateverは常に /ajax/index に移動し、/ajax/user-inserted-value として送信したかった

$dynamic1 を維持して $dynamic2 と $dynamic3 を修正するにはどうすればよいですか??

4

2 に答える 2

0

ねえ、今では、各 (ajax) アクションを独自のアクションに移動させたいだけのように聞こえます。そうですか?もしそうなら、私はあなたがこれを使うことができると思います:

  $dynamic2 = new Zend_Controller_Router_Route(
        '/ajax/:action',
        array(
            'controller' => 'ajax'
            ),
            array(
                  'action' => '^[a-zA-Z0-9_]*$',
                )
        );

正規表現と一致しない残りの ajax 呼び出しに対して、より一般的なものを追加することもできます。

  $dynamic1_and_a_half = new Zend_Controller_Router_Route(
        '/ajax/:variable',
        array(
            'controller' => 'ajax',
            'action' => 'index'
            )
        );

これがあなたの言いたいことではない場合、コントローラーも投稿してもらえますか? /ajax/whatever 呼び出しをどこに送りたいですか?

于 2011-01-08T09:45:39.233 に答える
0

Zend が「負の」一致条件の使用をサポートしているとは思いません。幸いなことに、正規表現は否定的な先読みまたは後読みを使用します。

たとえば、次の正規表現は次のとおりです。

(?!foo$|bar$)(?<!^foo|^bar)$

foo正確にまたはである一致を除外するように正規表現パーサーに指示しますbar

fbar、それでも一致しますbfoofbarf

注: 上記の正規表現では、[a-zA-Z0-9_]は とまったく同じ\wです。

于 2011-01-04T21:28:07.193 に答える