我碰到一個問題,我似乎無法找到一個好的解決方案,使其工作。我必須在Zend Framework項目中製作一些動態路線。我會很快解釋我的問題是什麼:Zend Framework路由器動態路由
我需要動態的自定義路由「擴展」默認路由(module/controller/action/params
)。我爲之工作的項目有幾個合作伙伴,路線必須與這些合作。 要存儲我創建靜態類的夥伴,它看起來像這樣。
<?php
class App_Partner
{
static public $partners = array(
array(
'name' => 'partner1',
'picture' => 'partner1.jpg'
),
array(
'name' => 'partner2',
'picture' => 'partner2.jpg'
),
array(
'name' => 'partner3',
'picture' => 'partner3.jpg'
)
);
static public function routePartners() {
$partners = array();
foreach(self::$partners as $partner) {
array_push($partners, strtolower($partner['name']));
}
$regex = '(' . implode('|', $partners) . ')';
return $regex;
}
}
所以App_Partner::routePartners()
我返回一個字符串像(partner1|partner2|partner3)
,我用它來創建正確的路線。我的目標是爲我在Bootstrap中設置的每條路線設置每個合作伙伴的自定義路線。所以如果我有一條路線add-product.html
集,我希望它爲每個合作伙伴工作partner1/add-product.html
,partner2/add-product.html
和partner3/add-product.html
。 另外,partner1/
,partner2/
, partner3
應該路由到default/index/index
。
事實上,我讓這件事情使用下面的路線工作。
<?php
$routeProposal = new Zend_Controller_Router_Route_Regex(
App_Partner::routePartners() . '?/?proposals.html',
array(
'module' => 'default',
'controller' => 'proposal',
'action' => 'index',
'page' => 1
),
array(1 => 'partner'),
"%s/proposals.html"
);
$router->addRoute('proposal', $routeProposal);
問題
上述路線工作正常,如果我使用請求URI的合作伙伴,但如果我不這樣做,我得到雙斜線狀public//proposals.html
因爲在設置反向路線上面的路線是"%s/proposals.html"
。我似乎無法找到一種方法來避免這種反向路由,因爲我使用url查看助手來構建我的網址,如果沒有設置反向路由,我會得到一個異常說明這一點。
我還需要沒有夥伴設置的工作路線,這將是默認方式(add-product.html
,proposals.html
等)。
請問這有幫助嗎? http://stackoverflow.com/questions/4626048/zend-framework-how-to-map-fully-dynamic-route – 2011-03-17 09:06:52
我讀過,但它不能幫助我太多。他的路線是獨一無二的。我的地址是「可覆蓋的」 - 幾條路由必須具有相同的名稱,以便我可以使用基於路由名稱的URL助手構建URL。 – 2011-03-17 09:23:03
:-)他的路線是我的路線=相同的用戶。我有一個解決方案,如果別人沒有打敗我,我會在後面寫出來。 – 2011-03-17 09:47:31