Маршрут не работает, когда параметр передан действию по умолчанию - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующие настройки маршрута.

$router->add('/schools', array(
    'module' => 'schools',
    'namespace'=>'MyNameSpace\Schools\Controllers\\',
    'controller'=>'index',
    'action' => 'index'
));

$router->add('/schools/:params",array(
    'module' => 'schools',
    'namespace'=>'MyNameSpace\Schools\Controllers\\',
    'controller'=>'index',
    'action' => 'index',
    'params' => 1
));

Проблема:

1.  http://www.example.com/schools/23 

Работает нормально

2.  http://www.example.com/schools/~23

Работает также

Но

3.  http://www.example.com/schools/school-name

не работает, где school-name, ~23 и 23 в приведенных выше URL-адресах являются параметрами для действия по умолчанию (index) контроллера.

Я ничего не могу напечатать в методе initialize контроллера.Пробовал ставить try catch на main метод index.php, без ошибок.

Я ничего не могу напечатать, когда выполняется 3-й URL выше, я просто печатаю 1 в браузере, нетдругие ошибки.Затем я напечатал соответствующий путь маршрута в http://www.example.com/schools/~23, и он дал

Phalcon\Mvc\Router\Route Object
(
    [_pattern:protected] => /schools/:params
    [_compiledPattern:protected] => #^/schools(/.*)*$#
    [_paths:protected] => Array
        (
            [module] => schools
            [namespace] => MyNameSpace\Schools\Controllers\
            [controller] => index
            [action] => index
            [params] => 1
        )

    [_methods:protected] => 
    [_hostname:protected] => 
    [_converters:protected] => 
    [_id:protected] => 34
    [_name:protected] => 
    [_beforeMatch:protected] => 
    [_group:protected] => 
)

Следуя маршруту, объект печатается в http://www.example.com/schools/23

Phalcon\Mvc\Router\Route Object
(
    [_pattern:protected] => /schools/:action/:params
    [_compiledPattern:protected] => #^/schools/([a-zA-Z0-9\_\-]+)(/.*)*$#
    [_paths:protected] => Array
        (
            [module] => schools
            [namespace] => MyNameSpace\Schools\Controllers\
            [controller] => index
            [action] => 1
            [params] => 2
        )

    [_methods:protected] => 
    [_hostname:protected] => 
    [_converters:protected] => 
    [_id:protected] => 36
    [_name:protected] => 
    [_beforeMatch:protected] => 
    [_group:protected] => 
)

ОБНОВЛЕНИЕ Удивительно, но следующий URL также работает

http://www.example.com/schools/~school-name, но не http://www.example.com/schools/school-name

Phalcon\Mvc\Router\Route Object
(
    [_pattern:protected] => /schools/:params
    [_compiledPattern:protected] => #^/schools(/.*)*$#
    [_paths:protected] => Array
        (
            [module] => agencies
            [namespace] => MyNameSpace\Schools\Controllers\
            [controller] => index
            [action] => index
            [params] => 1
        )

    [_methods:protected] => 
    [_hostname:protected] => 
    [_converters:protected] => 
    [_id:protected] => 34
    [_name:protected] => 
    [_beforeMatch:protected] => 
    [_group:protected] => 
)

Кто-нибудь может мне помочь, что я здесь не так делаю?Спасибо

1 Ответ

0 голосов
/ 18 февраля 2019

Если вы видите это [_pattern:protected] => /schools/:action/:params и ваш код не имеет этого правила, то это выглядит как применяемый маршрут по умолчанию.

Создайте Router с false, чтобы отключить маршруты по умолчанию.

в коде Phalcon явно установлено использование по умолчанию: https://docs.phalconphp.com/3.4/en/api/Phalcon_Mvc_Router

public function __construct(bool! defaultRoutes = true)

...