Каким должен быть вывод Zend\Mvc\Router\RouteInterface::assemble() в ZF2

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

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

Вот что такое один из внутренних маршрутизаторов (Zend\ Mvc\Router\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


person mdthh    schedule 08.02.2015    source источник


Ответы (1)


В основном сборка - это то, что будет вызываться, когда вы делаете такие вещи, как $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));, стек маршрутов найдет созданный маршрут для «теста», это \Zend\Mvc\Router\Http\Segment, а затем вызовет его функцию сборки, которая примет параметры, отправленные в вызов toRoute, и он даст строку URL, подобную этой

/тест/1

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

person Otto Sandström    schedule 08.02.2015