2

この構造に応答できる Router を作成しようとしています:

module/controller/action/idmodule/controller/action/page

唯一の違いは「id」または「page」です。私はこのコードを使用しています:

$routeAdmin = new Zend_Controller_Router_Route(
  'administrador/:controller/:action/:id/:pg',
  array(
    'module' => 'administrador',
    'controller' => 'index',
    'action' => 'index',
    'id' => 0,
    'pg' => 1
  ),
  array(
    'id' => '\d+',
    'pg' => '\d+'
  )
);
$router->addRoute('administrador', $routeAdmin);

問題は、いくつかの状況で私が望むことです:

'http://www.domain.cl/administrador/productos/2' => (module=>administrador, controller=>productos,page=>2)しかし、ルーターの「administrador」を使用すると、'http://www.domain.cl/administrador/productos/index/0/2' (module=>administrador, controller=>productos,action=>index,id=>0,page=>2)

このような場合にどのように機能するかについて、私は非常に混乱しています。最初のルーターには「id」パラメーターのみがあり、もう1つのルーターには「ページ」パラメーターしかない2つのルーターを作成しようとしました。URL ヘルパーから次のように使用します。

  1. $this->url(array('module' => 'administrador', 'controller' => 'productos', 'action' => 'index', 'id' => 0), 'administradorId');

  2. $this->url(array('module' => 'administrador', 'controller' => 'productos', 'action' => 'index', 'page' => 1), 'administradorPg');

しかし、ルーターを使用したときは、ルーターに最後に追加されたものを常に選択します ( $router->addRoute('routerIdentifier', $route);)

ありがとう

4

2 に答える 2

2

私は同様の問題を抱えていましたが、このようなルートを1つだけ定義することでこれを回避しました

$routeAdmin = new Zend_Controller_Router_Route(
  'administrador/:controller/:action/:id/:pg',
  array(
    'module' => 'administrador',
    'controller' => 'index',
    'action' => 'index',
    'id' => 0
  ),
  array(
    'id' => '\d+'
  )
);
$router->addRoute('administrador', $routeAdmin);

次に、 を取得して、それがどこにあるかを確認するactions必要があります。たとえば、参加している場合はイベント テーブルを調べたり、参加している場合はページを探したりします。idid/administrador/events/view/1/administrador/pages/view/1

しかし、問題が実際に発生するのidは、特定のコントローラーおよびアクション内のイベントまたはページのいずれかになる可能性がある場合です。これを回避する唯一の実際の方法はid、たとえば、使用するタイプを明示的に設定することです

/administrador/events/view/index/id/1

また

/administrador/pages/view/index/page/1

インデックス部分を削除したい場合は、次のようなルートを設定します

$routeAdmin = new Zend_Controller_Router_Route(
  // Remove the action from here and explicitly set the controller
  'administrador/pages/:pg',
  array(
    'module' => 'administrador',
    'controller' => 'pages',
    // Then set the default action here
    'action' => 'index',
    'pg' => 0
  ),
  array(
    'pg' => '\d+'
  )
);
$router->addRoute('administradorpages', $routeAdmin);

あなたが何を求めているかは、基本的に多くの当て推量につながるため、予期しない結果が生じるリスクがあります。

于 2011-01-31T09:06:35.203 に答える
1

ルートの動的セグメントを見てください。それはまさにあなたが望むものではありませんが、あなたの場合に役立つかもしれません.

于 2011-01-31T03:29:58.607 に答える