ZF2 中 Zend\Mvc\Router\RouteInterface::assemble() 的输出应该是什么
What schould be the output of Zend\Mvc\Router\RouteInterface::assemble() in ZF2
我正在为扩展 Zend\Mvc\Router\RouteInterface 的 Zend Framework 2 项目编写自定义路由器。路线应该来自数据库(有数百页的大型项目)。一个工作的 Router 显然只需要两个方法:match()
和 assemble()
。我得到的那场比赛还不错。
但是 assemble()
呢? 这个方法应该是什么return?难道它只是return应用程序的基本路径吗?
ZF2 的其中一个内部路由器 (Zend\Mvc\Router\SimpleRouteStack) 的作用如下:
/**
* 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);
}
基本上 assemble 就是当您执行 $this->redirect-toRoute($name, $params);
之类的操作时会调用的内容
所以它应该 return 一个基于路由配置的 URL 字符串。该路由可以使用相同的路由配置进行匹配。
当您调用 toRoute 时,您发布的路由堆栈会找到具有您在调用中指定的名称的路由,然后要求它 assemble 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',
),
),
),
这个名为'test'的路由当我们调用$this->redirect-toRoute('test', array('id' => 1));
时路由栈会找到'test'的实例化路由,这是一个\Zend\Mvc\Router\Http\Segment然后调用它assemble 函数,它将在对 toRoute 的调用中获取参数发送,它将产生一个 URL 字符串,如下所示
/test/1
这基本上就是 assemble 函数的作用。
我正在为扩展 Zend\Mvc\Router\RouteInterface 的 Zend Framework 2 项目编写自定义路由器。路线应该来自数据库(有数百页的大型项目)。一个工作的 Router 显然只需要两个方法:match()
和 assemble()
。我得到的那场比赛还不错。
但是 assemble()
呢? 这个方法应该是什么return?难道它只是return应用程序的基本路径吗?
ZF2 的其中一个内部路由器 (Zend\Mvc\Router\SimpleRouteStack) 的作用如下:
/**
* 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);
}
基本上 assemble 就是当您执行 $this->redirect-toRoute($name, $params);
所以它应该 return 一个基于路由配置的 URL 字符串。该路由可以使用相同的路由配置进行匹配。
当您调用 toRoute 时,您发布的路由堆栈会找到具有您在调用中指定的名称的路由,然后要求它 assemble 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',
),
),
),
这个名为'test'的路由当我们调用$this->redirect-toRoute('test', array('id' => 1));
时路由栈会找到'test'的实例化路由,这是一个\Zend\Mvc\Router\Http\Segment然后调用它assemble 函数,它将在对 toRoute 的调用中获取参数发送,它将产生一个 URL 字符串,如下所示
/test/1
这基本上就是 assemble 函数的作用。