我有奇怪的(在我看來)與Zend Framework 2的問題。我調用我的ajax函數路由名稱是不正確的。
這裏是我的路由的一部分:ZF2子路由 - ajax不返回正確的路由名稱
'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
}
category.phtml部分,還有就是我的形式的代碼,我將只顯示Ajax請求
的網址<input type="hidden" name="url" value="<?php echo $this->url('ajax/'.$this->route_name, array('name' => $this->route_param , 'page' =>$this->pages['current'])); ?>">
所以,你可以看到我傳遞變量從操作來查看孩子路線的名字,然後我的網址是這樣的:
$this->url('ajax/'.$this->route_name, array(...))
當我在我的domain.com/category
AJAX網址是:
$this->url('ajax/category', array(...))
當我在我的domain.com/subcategory
AJAX網址是:
$this->url('ajax/subcategory', array(...))
這裏是來怪異的一部分。正如你在上面看到的,我的ajax動作獲取當前的路由名稱。如果請求是從domain.com/subcategory
或domain.com/category
發送,則無關緊要,值始終是路由的最後一個孩子。
在
$route = $this->getEvent()->getRouteMatch()->getMatchedRouteName();
這個例子值始終
string 'ajax/category' (length=13)
我不應該得到的路線名稱取決於$this->url()
參數?如果是這樣,我怎麼能得到這個?
我已閱讀http://framework.zend.com/manual/2.2/en/modules/zend.mvc.routing.html,我沒有看到有關返回子路由最後一個子名稱的任何信息。