我遇到了一个问题,我似乎无法找到一个好的解决方案来让它发挥作用。我必须在 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 查看帮助程序构建了我的 url ,如果没有设置反向路由,我会收到一个异常说明。
我还需要在没有合作伙伴集的情况下工作的路线,这将是默认方式(add-product.html
等proposals.html
)。