Я собираюсь создать такую ссылку:
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?
Переименуйте ключ маршрута из «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), чтобы отразить это изменение.
Других решений пока нет …