我只是Zend的新手,我對Zend路由器有點麻煩。我搜索了它,但沒有發現...Zend控制器路由器:定義變量以指向一個控制器中的不同動作
我想能夠定義一個路由器爲每個定義的變量在uri級別指向一個控制器中的不同動作。
我與郎和模塊,所以我在系統啓動的應用程序定義的下一個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;
}
我希望能夠通過自己定義的操作來訪問論壇板塊和論壇主題。
喜歡的東西:
MYDOMAIN /論壇 - >論壇/指數
MYDOMAIN /論壇/節 - >論壇/ sectionAction
MYDOMAIN /論壇/節/話題 - > forum/topicAction
還有lang和modul向在URI級別等來定義:
MYDOMAIN /郎/模塊/論壇
MYDOMAIN /郎/模塊/論壇/部分
MYDOMAIN /郎/模塊/論壇/部分/話題
所以我有這樣的:
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);
現在,這隻能如果我定義了郎和URI層次的模塊,但如果我喜歡=> MYDOMAIN /論壇定義不起作用/ section |部分/主題。這也爲我的導航 - >菜單帶來了另一個問題。如果我在路由器定義中將「forum」定義爲靜態變量,那麼當我將鼠標懸停在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);
但正如我所料,這並不工作。
任何幫助,將不勝感激,謝謝。
哦,我看到了,謝謝你的回覆,但我想要做的事情是:取決於URI上有多少個參數,我將使用Controller_Action進行渲染。所以我可以在路由器級別定義,如果論壇控制器得到的第一個參數將用「sectionAction」渲染,如果我有兩個參數,我將使用「topicAction」渲染,我只需要做一些事情,比如'public function sectionAction(){$ section = $ this - > _ request-> getParam('section'); // @ TODO:從Db獲取並呈現}'這可以通過Zend_Controller_Router完成嗎? – Ramiro 2012-08-15 19:38:50
我在codeIgniter中做了這樣的事情,在路由配置上我設置了一個像'$ routes ['forum /(az)'] ='forum/section''這樣的數組,並且匹配第二個參數只需添加一個新的路由器過濾器例如:'$ routes ['forum /(az)/(az)'] ='forum/topic''這可能與Zend Routers相匹配嗎?像重定向,但只獲取uri參數並重定向到所需的操作。 – Ramiro 2012-08-15 20:06:43
Codeigniter使用基於段的檢查,而zend檢查請求!所以沒有'segment'這樣的東西,但是,使用Request-Param獲取東西...在這裏,正如我所提到的,您將不得不重新計劃應用程序......動作來自控制器...示例,用戶控制器可以查看,添加,修改,刪除..路線用於例如路線 - 「我的儀表板」路由到用戶控制器 - 工具和選項操作...很酷? – Karma 2012-08-15 21:27:44