У вас есть два заявленных маршрута.Вы объявили маршрут /companies[/:id]
и передали ему child_routes: /companies
.По сути, у вас есть: /companies
, /companies/:id
и /companies/companies
.Также вы используете segment
маршруты.Для маршрутов отдыха вы должны использовать Метод маршрутов .
Например:
<?php
namespace Company;
use Company\Controller\Company\AddController;
use Company\Controller\Company\DeleteController;
use Company\Controller\Company\EditController;
use Company\Controller\Company\IndexController;
use Company\Controller\Company\ViewController;
use Zend\Router\Http\Method;
return [
'router' => [
'routes' => [
'companies_index' => [
'type' => Method::class,
'may_terminate' => true,
'options' => [
'verb' => 'GET',
'route' => '/companies',
'defaults' => [
'controller' => IndexController::class,
'action' => 'index',
],
],
'child_routes' => [
'companies_view' => [
'type' => Method::class,
'may_terminate' => true,
'options' => [
'verb' => 'GET',
'route' => '/:id',
'defaults' => [
'controller' => ViewController::class,
'action' => 'view',
],
],
],
'companies_edit' => [
'type' => Method::class,
'may_terminate' => true,
'options' => [
'verb' => 'PATCH',
'route' => '/:id',
'defaults' => [
'controller' => EditController::class,
'action' => 'edit',
],
],
],
'companies_delete' => [
'type' => Method::class,
'may_terminate' => true,
'options' => [
'verb' => 'DELETE',
'route' => '/:id',
'defaults' => [
'controller' => DeleteController::class,
'action' => 'delete',
],
],
],
],
],
'companies_add' => [
'type' => Method::class,
'may_terminate' => true,
'options' => [
'verb' => 'POST',
'route' => '/companies',
'defaults' => [
'controller' => AddController::class,
'action' => 'add',
],
],
],
],
],
];
Также этот подвопрос:
Но всякий раз, когда я пытаюсь запросить / companies / 1, он по-прежнему показывает индексmethod.
Это потому, что ваш начальный индексный маршрут /companies[/:id]
.Поэтому, если вы добавите /1
к URL-адресу, который запрашиваете, этот маршрут все равно будет соответствовать и отправит вас к действию index
для CompaniesController
, которое вы там настроили.