Я пытаюсь создать простой CRUD в Zf2, чтобы узнать это, и у меня возникают проблемы с маршрутизацией единственного контроллера, который у меня есть. У меня есть эта ошибка;
Msgstr «Запрошенный контроллер не может быть сопоставлен с существующим классом контроллера».
Я пытаюсь назвать этот маршрут: http://zf2.local/Listapp
Это моя структура:
module/Listapp/src/Listapp/Controller/ListappController.php
Пространство имен namespace Listapp\Controller;
Это мой конфиг автозагрузчика:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
// Autoload Listapp classes
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
// Autoload ListappController classes
'ListappController' => __DIR__ . '/src/Listapp',
)
)
);
}
А это мой module.config.php
:
return array(
'controllers' => array(
'invokables' => array(
'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController'
)
),
'router' => array(
'routes' => array(
'listapp' => array(
'type' => 'segment',
'options' => array(
'route' => '/[:controller[/:action][/:id]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Listapp\Controller\Listapp',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'Listapp' => __DIR__ . '/../view',
),
), );
Любая помощь будет оценена спасибо!
РЕДАКТИРОВАТЬ:
Это код в моем контроллере (за исключением других функций CRUD):
namespace Listapp\Controller;
use Zend\Mvc\Controller\AbstractActionController;
class ListappController extends AbstractActionController
{
public function indexAction()
{
}
}
Так что просто для дальнейшего объяснения моего комментария, включая :controller
Сегментируя маршрут, вы сказали ZF попытаться сопоставить первое, что в вашем URL, с чем-то, что менеджер контроллера может загрузить (в вашем случае, один из ключей в вашем контроллере вызывается). Контроллер по умолчанию, который вы определили в вашем маршруте, будет применяться, только если вы посетили http://zf2.local/
,
Поэтому самое быстрое решение для вас — изменить конфигурацию на:
'controllers' => array(
'invokables' => array(
'Listapp' => 'Listapp\Controller\ListappController'
)
),
«Listapp» в URL будет соответствовать этому контроллеру, и все будет работать так, как вы ожидаете.
В общем, это проясняет ситуацию, если вы избегаете использования :controller
в маршрутах и иметь хотя бы один маршрут на контроллер, например:
'controllers' => array(
'invokables' => array(
'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController'
)
),
'router' => array(
'routes' => array(
'listapp' => array(
'type' => 'segment',
'options' => array(
'route' => '/listapp[/:action[/:id]]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Listapp\Controller\Listapp',
'action' => 'index',
),
),
),
),
),
Других решений пока нет …