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), чтобы отразить это изменение.

Другие вопросы по тегам