php前缀路由器的,php – 使用前缀和Zend_Controller_Router_Route
在現(xiàn)有的Zend Framework網(wǎng)站上,幾乎沒(méi)有控制器,沒(méi)有模塊,我需要在默認(rèn)路由中添加一些前綴.
例如,我目前有:
/products
/products/id/1
/training
/commonpage
我想添加一個(gè)產(chǎn)品線級(jí)別,而不會(huì)在x模塊中復(fù)制我的控制器(我將使用_getParam請(qǐng)求我的控制器內(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) . ')')
));
}
但沒(méi)有任何成功(它給了我一個(gè)404).
在這些條件下,如何構(gòu)建與所有uri匹配的單個(gè)路由:
> uri的前綴匹配我的產(chǎn)品線數(shù)組中的一個(gè)值
>該路由僅在允許以“產(chǎn)品線路”方式訪問(wèn)控制器的情況下才有效 – 通過(guò)包含我的控制器名稱的數(shù)組,例如
UPDATE
好的,我設(shè)法真正接近我正在試圖用這個(gè)代碼:
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')) . ')'
)
));
}
有了我可以訪問(wèn)/ line1 / products但不是/ line1 / commonpage,這是我想要的 – 所以控制器約束是非常好的.您可以看到我在Zend注冊(cè)表中添加產(chǎn)品線名稱,所以當(dāng)我在模板中使用URL View Helper時(shí),它被保存(這樣我就不必編輯我的所有模板來(lái)添加我的幫助器中的product line參數(shù)調(diào)用).
我現(xiàn)在的問(wèn)題是關(guān)于這個(gè)幫助:似乎我的控制器約束只是被忽略.當(dāng)我在我的模板中這樣做:
My link
我結(jié)束了這個(gè):
My link
所以添加了產(chǎn)品線,盡管事實(shí)上這不允許我的路由器的控制器約束.
總結(jié)
以上是生活随笔為你收集整理的php前缀路由器的,php – 使用前缀和Zend_Controller_Router_Route的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: o oia ospf 路由优先_CCNP
- 下一篇: matlibplot 一张图画多个曲线_