Я столкнулся с проблемой, и я не могу найти хорошее решение, чтобы она работала.Мне нужно сделать несколько динамических маршрутов в проекте 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
и т. Д.).