Почему параметр url индексируется как «named» вместо «pass» в cakephp?

Мой URL: http://localhost/intranet/customers/search/1/1A%3A79%3A32%3A97%3AF2/1 Я печатаю объект params следующим образом:

print_r($this->params); 

Это напечатает следующий массив:

[params] => Array
        (
            [plugin] => 
            [controller] => customers
            [action] => search
            [named] => Array
                (
                    [1A] => 79:32:97:F2
                )

            [pass] => Array
                (
                    [0] => 1
                    [1] => 1
                )

        )

но он должен печатать:

[params] => Array
        (
            [plugin] => 
            [controller] => customers
            [action] => search
            [named] => Array
                (

                )

            [pass] => Array
                (
                    [0] => 1
                    [1] => 1A:79:32:97:F2
                    [2] => 1
                )
        ) 

Но когда я меняю URL-адрес, например: http://localhost/intranet/customers/search/1/abc/1

[params] => Array
        (
            [plugin] => 
            [controller] => customers
            [action] => search
            [named] => Array
                (

                )

            [pass] => Array
                (
                    [0] => 1
                    [1] => abc
                    [2] => 1
                )
        ) 

Какая проблема с 1A:79:32:97:F2 в качестве параметра в URL-адресе?


person Abdus Sattar Bhuiyan    schedule 28.04.2017    source источник
comment
вам, вероятно, нужно закодировать эти :   -  person yBrodsky    schedule 28.04.2017
comment
Вы не должны использовать устаревшие именованные параметры, начиная с CakePHP 2.0 (2011 год). См. здесь. Вместо этого используйте строки запроса для небуквенно-цифровых данных. Для простых (и упорядоченных) буквенно-цифровых данных вы можете использовать переданные, но убедитесь, что они правильно пронумерованы.   -  person mark    schedule 28.04.2017


Ответы (1)


Вам нужно отключить жадность анализа именованных параметров, по умолчанию все параметры, которые выглядят как именованные параметры, анализируются как таковые (то есть значения, которые содержат разделитель :).

В конфигурации ваших маршрутов используйте второй аргумент Router::connectNamed() для передачи дополнительных параметров, что-то вроде этого, что позволит включить только параметры разбиения на страницы CakePHP по умолчанию:

Router::connectNamed(
    false, // no custom named parameters
    array(
        'default' => true, // default pagination parameters
        'greedy' => false  // no greediness
    )
);

Смотрите также

person ndm    schedule 28.04.2017