我碰到一个问题,我似乎无法找到一个好的解决方案,使其工作。我必须在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