Установить универсальный маршрут - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь создать простой SPA. Как я могу установить универсальный маршрут для корневой страницы? Например, в Laravel можно сделать это.

Route::any('{any?}', function () {
    return view('index');
})->where('any','.*');

Но я не пойму, как это сделать в Zend Framework 3

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

При использовании этого типа маршрутов вы должны уделять большое внимание их заказу.

Согласно Документация к маршрутизатору Zend :

Routes will be queried in a LIFO order, and hence the reason behind the name RouteStack.

Более того:

As such, routes that will match most often should be registered last,
and least common routes first.
[...]
Alternatively, you can set priorities by giving the priority as third parameter
to the addRoute() method, specifying the priority in the route specifications 
or setting the priority property within a route instance before adding it 
to the route stack.

В вашем случае тот факт, что данный конфиг работает, является просто «счастливым совпадением» (ну, объявление порядка модулей немного помогает), потому что вы используете маршрут ксоответствовать всему , даже тому, что должно соответствовать маршруту API.

Я предлагаю вам добавить приоритет к этим маршрутам, чтобы быть уверенным, что маршрут «соответствует всему»будет последним, чтобы быть проверенным:

//module App, file: config.module.php
'routes' => [
    'home' => [
        'type' => Regex::class,
        'priority' => -1000, // make sure that this will be tested as last
        'options' => [
            'regex' => '([^\?]+)(\?.*)?',
            'defaults' => [
                'controller' => Controller\IndexController::class,
                'action' => 'index',
            ],
            'spec' => ''
        ],
    ],
],

Маршрут Api module идеален

0 голосов
/ 16 октября 2019

Вот мое решение

У меня есть базовый модуль "Приложение". Затем я создал новый модуль «Api» И вот что у меня в настройках модуля

//module App, file: config.module.php
'routes' => [
            'home' => [
                'type' => Regex::class,
                'options' => [
                    'regex'    => '([^\?]+)(\?.*)?',
                    'defaults' => [
                        'controller' => Controller\IndexController::class,
                        'action'     => 'index',
                    ],
                    'spec' => ''
                ],
            ],
        ],


//module Api file:config.module.php
'routes' => [
            'api_index' => [
                'type'    => Regex::class,
                'options' => [
                    'regex'    => '/api/v1/(?<index>[a-zA-Z0-9_-]+)',
                    'defaults' => [
                        'controller'    => Controller\V1\IndexController::class,
                        'action'        => 'index',
                    ],
                    'spec' => '/api/v1/%index%'
                ],
            ],
        ],
...