Zend-маршрут с неограниченными параметрами

Я использую Zend 1.10. Я пытаюсь создать маршрут для неограниченных переменных, таких как abc.com/var1/var2/var3 и так далее.

До сих пор я искал и узнал, что я могу добавить маршрут для каждой переменной, как

$route = new Zend_Controller_Router_Route(
'/emaillog/:var1',
array(
'controller' => 'emaillog', // The controller to point to.
'action'     => 'index',  // The action to point to, in said Controller.
':var1' =>null  //default value if param is not passed
)
);
$frontController->getRouter()->addRoute('emaillogWithVar1', $route);

и для второй переменной,

$route = new Zend_Controller_Router_Route(
'/emaillog/:var1/:var2',
array(
'controller' => 'emaillog', // The controller to point to.
'action'     => 'index',  // The action to point to, in said Controller.
':var1' =>null,  //default value if param is not passed
':var2' =>null  //default value if param is not passed
)
);
$frontController->getRouter()->addRoute('emaillogWithVar2', $route);

Но работа, которую я собираюсь сделать, может содержать 1-∞ бесконечных переменных.

Поэтому я хочу иметь один маршрут для неограниченных переменных.

Любая помощь будет оценена!

0

Решение

Есть способ получить бесконечные параметры. Для этого вам не нужно объявлять их.

Чтобы не сказать, что URL index/test/p1/p2/p3/p4/p5Теперь, если вы попробуете следующее внутри IndexController:

public function testAction()
{
var_dump($this->getRequest());
}

Вы получите дамп экземпляра Zend_Controller_Request_Http, в этой свалке, вы увидите, 2 свойства, _params & _pathInfo, Подобно:

protected '_pathInfo' => string '/index/test/p1/p2/p3/p4/p5' (length=26)
protected '_params' =>
array (size=5)
'controller' => string 'index' (length=5)
'action' => string 'test' (length=4)
'p1' => string 'p2' (length=2)
'p3' => string 'p4' (length=2)
'module' => string 'default' (length=7)

1-й метод: Сейчас в _params, они будут происходить как key => value пары, пока они even, последний odd параметр будет игнорироваться. Вы можете получить их (например):

$params = $this->getRequest()->getParams();
unset($params['controller']);
unset($params['action']);
unset($params['module']);
$params = array_merge(array_keys($params), array_values($params));
var_dump($params);

Выход:

array (size=4)
0 => string 'p1' (length=2)
1 => string 'p3' (length=2)
2 => string 'p2' (length=2)
3 => string 'p4' (length=2)

2-й метод: ИЛИ вы можете использовать _pathinfo чтобы получить параметры с помощью взрыва, как:

$path = $this->getRequest()->getPathinfo();
$params = explode('/', $path);
unset($params[0]);
unset($params[1]);
unset($params[2]);
var_dump($params);

Выход:

array (size=5)
3 => string 'p1' (length=2)
4 => string 'p2' (length=2)
5 => string 'p3' (length=2)
6 => string 'p4' (length=2)
7 => string 'p5' (length=2)
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector