php前缀路由器的,php – 使用前缀和Zend_Controller_Router_Route
在現(xiàn)有的Zend Framework網(wǎng)站上,幾乎沒有控制器,沒有模塊,我需要在默認(rèn)路由中添加一些前綴.
例如,我目前有:
/products
/products/id/1
/training
/commonpage
我想添加一個產(chǎn)品線級別,而不會在x模塊中復(fù)制我的控制器(我將使用_getParam請求我的控制器內(nèi)的正確的產(chǎn)品線).
所以我的新路徑將是:
/line1/products
/line1/products/id/1
/line2/training
/commonpage
我到目前為止所嘗試的是這條路線(位于我的Bootstrap文件中):
protected function _initRoutes()
{
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addRoute('productLineRoute', new Zend_Controller_Router_Route(
':line/:controller/:action',
array('module' => 'default'),
array('line' => '(' . implode('|', Zend_Registry::getInstance()->constants->lines) . ')')
));
}
但沒有任何成功(它給了我一個404).
在這些條件下,如何構(gòu)建與所有uri匹配的單個路由:
> uri的前綴匹配我的產(chǎn)品線數(shù)組中的一個值
>該路由僅在允許以“產(chǎn)品線路”方式訪問控制器的情況下才有效 – 通過包含我的控制器名稱的數(shù)組,例如
UPDATE
好的,我設(shè)法真正接近我正在試圖用這個代碼:
protected function _initConstants()
{
$registry = Zend_Registry::getInstance();
$registry->constants = new Zend_Config( $this->getApplication()->getOption('constants') );
$uri = ltrim($_SERVER['REQUEST_URI'], '/');
$product_line = substr($uri, 0, strpos($uri, '/'));
if(!empty($product_line) && in_array($product_line, Zend_Registry::getInstance()->constants->lines->toArray()) &&
$product_line != Zend_Registry::getInstance()->constants->lines->get(0)) {
$registry->product_line = $product_line;
} elseif(!isset($registry->gamme)) {
$registry->product_line = Zend_Registry::getInstance()->constants->lines->get(0);
}
}
protected function _initRoutes()
{
$router = Zend_Controller_Front::getInstance()->getRouter();
$registry = Zend_Registry::getInstance();
$router->addRoute('productLineRoute', new Zend_Controller_Router_Route(
':line/:controller/:action/*',
array(
'module' => 'default', 'action' => 'index',
'line' => (isset($registry->product_line)) ? $registry->product_line : Zend_Registry::getInstance()->constants->lines->get(0)
),
array(
'line' => '(' . implode('|', Zend_Registry::getInstance()->constants->lines->toArray()) . ')',
'controller' => '(' . implode('|', array('products', 'training')) . ')'
)
));
}
有了我可以訪問/ line1 / products但不是/ line1 / commonpage,這是我想要的 – 所以控制器約束是非常好的.您可以看到我在Zend注冊表中添加產(chǎn)品線名稱,所以當(dāng)我在模板中使用URL View Helper時,它被保存(這樣我就不必編輯我的所有模板來添加我的幫助器中的product line參數(shù)調(diào)用).
我現(xiàn)在的問題是關(guān)于這個幫助:似乎我的控制器約束只是被忽略.當(dāng)我在我的模板中這樣做:
My link
我結(jié)束了這個:
My link
所以添加了產(chǎn)品線,盡管事實上這不允許我的路由器的控制器約束.
總結(jié)
以上是生活随笔為你收集整理的php前缀路由器的,php – 使用前缀和Zend_Controller_Router_Route的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: o oia ospf 路由优先_CCNP
- 下一篇: matlibplot 一张图画多个曲线_