У меня есть странная (на мой взгляд) проблема с 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, есть код моей формы, я покажу только URL запроса Ajax
<input type="hidden" name="url" value="<?php echo $this->url('ajax/'.$this->route_name, array('name' => $this->route_param , 'page' =>$this->pages['current'])); ?>">
Итак, как вы можете видеть, что я передать переменную с именем дочернего маршрута от действий для просмотра, то мой URL выглядит следующим образом:
$this->url('ajax/'.$this->route_name, array(...))
Когда я в domain.com/category
мой АЯКС Ссылка:
$this->url('ajax/category', array(...))
Когда я в domain.com/subcategory
мой АЯКС Ссылка:
$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, и я не вижу никакой информации о возвращении последнего дочернего имени дочерних маршрутов.