ZF2 fromRoute не возвращает имя действия по умолчанию
Я собираюсь создать такую ссылку:
somesite.com/management/users/index/delete/10
в котором управление - это имя модуля, пользователи - это контроллер, индекс - это имя действия, а delete - это параметр, который получает идентификатор записи. Для создания этой ссылки я использую эту часть кода:
$delUrl = $this->url()->fromRoute('management-users', array(
'controller' => 'users',
'action' => 'index',
'delete' => $siteData['id'],
));
Мой конфиг, как показано ниже:
'router' => array(
'routes' => array(
'management-index' => array(
'type' => 'segment',
'options' => array(
'route' => '/management[/:controller][/:action][/delete/:delete][/:id]',
'constraints' => array(
'delete' => '[0-9]+' ,
'id' => '[0-9]+'
),
'defaults' => array(
'__NAMESPACE__' => 'Management\Controller',
'controller' => 'Index',
'action' => 'index'
),
),
),
),
),
Результат таков:
somesite.com/management/users/delete/10
Функция пропускает имя действия, потому что это моё действие по умолчанию, а затем получает имя удаления в качестве имени действия, и я, наконец, получаю ошибку 404. Как видите, у меня есть параметр "id", который не позволяет мне пропустить фразу "delete" из ссылки. Опуская "удалить" из URL, ZF2 получает ввод как "id", а не "delete". Я не могу изменить свое действие по умолчанию. Есть ли способ сказать ZF2 для ввода имени действия в URL?
1 ответ
Переименуйте ключ маршрута из "management-index" в "management-users". Измените имя контроллера с "Index" на "Users", чтобы маршрут выглядел следующим образом:
'router' => array(
'routes' => array(
'management-users' => array(
'type' => 'segment',
'options' => array(
'route' => '/management[/:controller][/:action][/delete/:delete][/:id]',
'constraints' => array(
'delete' => '[0-9]+' ,
'id' => '[0-9]+'
),
'defaults' => array(
'__NAMESPACE__' => 'Management\Controller',
'controller' => 'Users',
'action' => 'index'
),
),
),
),
),
Не забудьте изменить определение вашего контроллера (invocable или factory), чтобы отразить это изменение.