Что должно быть выводом Zend \ Mvc \ Router \ RouteInterface :: assembly () в ZF2

Я пишу свой собственный маршрутизатор для расширения Zend Framework 2 проекта Zend \ Mvc \ маршрутизатор \ RouteInterface. Маршруты должны исходить из базы данных (большой проект с сотнями страниц). Работающему маршрутизатору, очевидно, нужны только два метода: match() а также assemble(), Матч один у меня сработал хорошо.

Но что насчет assemble()? Что должен вернуть этот метод? Может быть, он возвращает только базовый путь к приложению?

Вот какой у одного из внутренних роутеров (Zend \ Mvc \ маршрутизатор \ SimpleRouteStack) ZF2 делает:

/**
* assemble(): defined by RouteInterface interface.
*
* @see    \Zend\Mvc\Router\RouteInterface::assemble()
* @param  array $params
* @param  array $options
* @return mixed
* @throws Exception\InvalidArgumentException
* @throws Exception\RuntimeException
*/
public function assemble(array $params = array(), array $options = array())
{
if (!isset($options['name'])) {
throw new Exception\InvalidArgumentException('Missing "name" option');
}

$route = $this->routes->get($options['name']);

if (!$route) {
throw new Exception\RuntimeException(sprintf('Route with name "%s" not found', $options['name']));
}

unset($options['name']);

return $route->assemble(array_merge($this->defaultParams, $params), $options);
}

Ссылка: Пользовательская маршрутизация в Zend Framework 2

0

Решение

В основном, сборка — это то, что называется, когда вы делаете такие вещи, как $this->redirect-toRoute($name, $params);

поэтому он должен возвращать строку URL на основе конфигурации маршрута. что маршрут может совпадать с использованием той же конфигурации маршрута.

Когда вы звоните toRoute, опубликованный вами маршрут маршрута находит маршрут с именем, указанным вами в вызове, а затем просит его собрать URL-адрес для этого маршрута.

'test' => array(
'type'    => 'Segment',
'options' => array(
'route'    => '/test[/:id]',
'constraints' => array(
'id'     => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
),
),
),

этот маршрут называется «тест», когда мы вызываем $this->redirect-toRoute('test', array('id' => 1)); стек маршрутов найдет конкретизированный маршрут для ‘test’, это \ Zend \ Mvc \ Router \ Http \ Segment, а затем вызовет функцию сборки, которая примет параметры, отправленные с помощью вызова toRoute, и выдаст URL такая строка

/ Тест / 1

и это в основном то, что делает функция сборки.

1

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

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

По вопросам рекламы [email protected]