Я пытаюсь понять всю конфигурацию, необходимую для того, чтобы моя маршрутизация работала в Zend Framework 2, и я не могу не задаться вопросом, делаю ли я это более сложным, чем это необходимо.Автоматическая маршрутизация на основе конвенций внутри модуля в Zend Framework 2 - возможно?
Я работаю на простое приложение, которое будет следовать очень простое соглашение:
/: модуль /: контроллер /: Действие
Я уже создал и проводной мой модуль, «СТК» (сокращение от «услуги»). Затем я создал второй контроллер, «ClientsController», и я не могу получить маршрутизацию для передачи моих запросов, например,/svc/clients/list, в ClientsController :: listAction().
Как я пробираюсь по сотням конфигураций, в глубоко вложенных массивах, я думаю - не существует способа просто по умолчанию сопоставлять мои URL-адреса с /: module /: controller/: действие?
Спасибо за любую помощь. Я ухожу от Zend Framework 2 Quick Start, который прошел через создание нового модуля и добавление контроллера к этому модулю. Но когда я попытался добавить второй контроллер к этому модулю, я споткнулся о маршрутизации.
Обновление: Я не поймал это в первый раз, но, по-видимому, это должно быть особенностью приложения Zend Framework Skeleton. Из краткого руководства:
ZendSkeletonApplication кораблей с «маршрут по умолчанию», что, скорее всего, получить вас к этому действию. Этот маршрут в основном ожидает «/ {модуль}/{контроллер}/{действие}», который позволяет указать это: «/ Зенд-пользователь/привет/мир»
Это именно то, что я хочу! Но я не могу заставить его работать.
В нем содержится неполный module.config.php, в котором содержится комментарий о размещении здесь «другой конфигурации». Я попытался выяснить, что это «другая конфигурация» есть, и завелся с этим:
return array(
'svc' => array(
'type' => 'Literal',
'options' => array(
'route' => '/svc',
'defaults' => array(
'controller' => 'svc\Controller\Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
'controllers' => array(
'invokables' => array(
'svc\Controller\Clients' => 'svc\Controller\ClientsController',
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);
JFYI, вот что мой контроллер выглядит.
namespace svc\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class ClientsController extends AbstractActionController {
public function indexAction() {
return new ViewModel();
}
public function anotherAction(){
return new ViewModel();
}
}
Мои маршруты не работают. Я получаю «маршрут не найден», когда пытаюсь подтянуть любой из моих маршрутов.
IIRC вы забыли добавить по умолчанию '«__NAMESPACE__»=>«SVC \ Controller'' ** редактировать ** но маршрут не найдено, странно, какой URL вы звоните? – Sam
Я добавил '__NAMESPACE__' => 'svc \ Controller', и никаких изменений нет. Я пробовал следующие URL: http: // zf-sample.localhost/svc/clients/index, http: //zf-sample.localhost/clients/index, http: //zf-sample.localhost/svc/clients/another, http: //zf-sample.localhost/clients/ другой. Все дают «Запрошенный URL не может быть сопоставлен маршрутизацией». – Josh