私は Zend を初めて使用したばかりで、Zend ルーターに少し問題があります。調べてみましたが、何も見つかりませんでした...
uri レベルで定義された変数ごとにルーターを定義して、1 つのコントローラーで別のアクションを指すことができるようにしたいと考えています。
私は言語とモジュールを扱っているので、ブートストラップ アプリケーションで次の initRoutes 関数を定義しました。
protected function _initRoutes()
{
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$defaultRoute = new Zend_Controller_Router_Route(
':lang/:module/:controller/:action',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'index',
'action' => 'index'
),
array(
'lang' => '^(en|es)$',
'module' => '^(default|admin)$'
)
);
$router->addRoute('defaultRoute', $defaultRoute);
return $router;
}
定義されたアクションによって、フォーラム セクションとフォーラム トピックにアクセスできるようにしたいと考えています。
何かのようなもの :
マイドメイン/フォーラム -> フォーラム/インデックス
マイドメイン/フォーラム/セクション -> フォーラム/セクションアクション
マイドメイン/フォーラム/セクション/トピック -> フォーラム/トピックアクション
また、次のような uri レベルで定義された lang とモジュールを使用します。
私のドメイン/言語/モジュール/フォーラム
私のドメイン/言語/モジュール/フォーラム/セクション
私のドメイン/言語/モジュール/フォーラム/セクション/トピック
だから私はこれを持っています:
class ForumController extends Zend_Controller_Action
{
public function indexAction()
{
}
public function sectionAction()
{
}
public function topicAction()
{
}
次に、 Default_Bootstrap 内に次のルートを作成しました。
$forumRoutes = new Zend_Controller_Router_Route(
':lang/:module/forum',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'forum',
'action' => 'index'
)
);
$sectionRoutes = new Zend_Controller_Router_Route(
':lang/:module/forum/:section',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'forum',
'action' => 'section',
'section' => ''
)
);
$topic = new Zend_Controller_Router_Route(
':lang/:module/forum/:section/:topic',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'forum',
'action' => 'topic',
'section' => '',
'topic' => ''
)
);
$router->addRoute('forumTopics', $topic);
$router->addRoute('forumSections', $section);
$router->addRoute('forum', $forumRoutes);
これは、lang とモジュールを uri レベルで定義した場合にのみ機能しますが、次のように定義した場合は機能しません => mydomain/forum/section | セクション/トピック。これにより、ナビゲーション->メニューにも別の問題が発生します。ルーター定義で「フォーラム」を静的変数として定義した場合、navigatoin.xml で定義された任意のラベルにカーソルを合わせると、uri レベルはすべてのラベルで同じ値になります。
私はこのようなチェーンを作ろうとしました:
$forumRoutes = new Zend_Controller_Router_Route(
':lang/:module/forum',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'forum',
'action' => 'index'
)
);
$section = new Zend_Controller_Router_Route(
':section',
array(
'action' => 'section',
'section' => ''
)
)
$topic = new Zend_Controller_Router_Route(
':topic',
array(
'action' => 'topic',
'topic' => ''
)
)
$chainedRoute = new Zend_Controller_Router_Route_Chain();
$chainedRoute->chain($topic)
->chain($section)
->chain($forumRoutes);
$router->addRoute($chainedRoute);
しかし、これは私が期待したようには機能しません。
どんな助けでも感謝します、ありがとう。