Zend framework2 ZF2子路由-ajax不';t返回正确的路由名称
我认为Zend Framework 2有一个奇怪的问题。调用ajax函数后,路由名称不正确。Zend framework2 ZF2子路由-ajax不';t返回正确的路由名称,zend-framework2,zend-route,Zend Framework2,Zend Route,我认为Zend Framework 2有一个奇怪的问题。调用ajax函数后,路由名称不正确。 以下是我的路线的一部分: 'ajax' => array( 'type' => 'Literal', 'options' => array( 'route' => '/ajax', 'defaults' => array(
以下是我的路线的一部分:
'ajax' => array(
'type' => 'Literal',
'options' => array(
'route' => '/ajax',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'ajax',
),
),
'may_terminate' => true,
'child_routes' => array(
'subcategory' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:name][/:page]',
'constraints' => array(
'name' => '[a-zA-Z][a-zA-Z0-9_-]*',
'page' => '[0-9]+',
),
'defaults' => array(
),
),
),
'category' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:name][/:page]',
'constraints' => array(
'name' => '[a-zA-Z][a-zA-Z0-9_-]*',
'page' => '[0-9]+',
),
'defaults' => array(
),
),
),
),
),
我的控制器代码的一部分
public function categoryAction()
{
$route['route_name'] = 'category';
$view = new ViewModel($route);
$view->setTemplate('application/index/category');
return $view;
}
public function subcategoryAction()
{
$route['route_name'] = 'subcategory';
$view = new ViewModel($route);
$view->setTemplate('application/index/category');
return $view;
}
public function ajaxAction()
{
$route = $this->getEvent()->getRouteMatch()->getMatchedRouteName();
var_dump($route); // return always last child route from config
}
phtml,这是我表单的代码,我只显示ajax请求的url
<input type="hidden" name="url" value="<?php echo $this->url('ajax/'.$this->route_name, array('name' => $this->route_param , 'page' =>$this->pages['current'])); ?>">
当我在domain.com/category
时,我的ajax url是:
$this->url('ajax/category', array(...))
$this->url('ajax/subcategory', array(...))
当我在domain.com/subcategory
时,我的ajax url是:
$this->url('ajax/category', array(...))
$this->url('ajax/subcategory', array(...))
奇怪的部分来了。如上所示,我的ajax操作获取当前路由名称。无论是从domain.com/subcategory
还是从domain.com/category
发送请求,值始终是路由的最后一个子项。在本例中
$route = $this->getEvent()->getRouteMatch()->getMatchedRouteName();
总是
string 'ajax/category' (length=13)
我是否应该根据$this->url()
参数获取路由名称?如果是,我如何获得此信息?我已经阅读了,但没有看到任何关于返回子路由的最后一个子名称的信息。类别和子类别具有相同的模式,因此在获取请求的url时,路由器无法找到正确的路由名称,并且在调用url插件构建url时,始终返回找到的最后一个条目(后进先出),您没有此问题,因为您命名了要生成的路由 如果您想要使用相同的url来请求类别和子类别,您必须找到另一种方法来区分它们,例如在传递name参数时 顺便说一下,您可以通过设置conf轻松克服此问题:
'subcategory' => array(
'type' => 'Segment',
'options' => array(
'route' => '/subcategoy/[:name][/:page]',
'constraints' => array(
'name' => '[a-zA-Z][a-zA-Z0-9_-]*',
'page' => '[0-9]+',
),
'defaults' => array(
),
),
),
'category' => array(
'type' => 'Segment',
'options' => array(
'route' => '/category/[:name][/:page]',
'constraints' => array(
'name' => '[a-zA-Z][a-zA-Z0-9_-]*',
'page' => '[0-9]+',
),
'defaults' => array(
),
),
),
在当前代码状态下,将正确生成url,并正确检测路由