CakePHP: Как отправить параметры $ _GET, такие как id [] = 1 & id [] = 2 & id [] = 3

0

при наличии следующего кода:

<?= $this->Html->link('Foobar', ['?' => ['id' => [1, 2, 3]]] ?>

Вывод следующий:

…id%5B0%5D=1&amp;id%5B1%5D=2&amp;id%5B2%5D=3
  1. Как можно получить синтаксис (более часто используемый) без индекса массива, такого как 0, 1, 2.
  2. Есть ли разница между% 5B и [? (да, я знаю, этот url убежал)
  • 3
    в терминах php% 5B и [в url идентичны. когда PHP строит $ _GET, все декодируется по URL, поэтому вы никогда не увидите% 5B при работе с $ _GET. С практической точки зрения, закодированная версия в 3 раза больше и может привести к усеченному URL, если вы добавляете «много» таких параметров в URL - браузеры имеют ограничения по длине URL.
Теги:
cakephp
cakephp-2.5

2 ответа

0
Лучший ответ

похоже, CakePHP использует внутренний метод php http_build_query. как описано в официальном документе, этот метод выводит массив в этом формате:

…id%5B0%5D=1&amp;id%5B1%5D=2&amp;id%5B2%5D=3
-1

Вы пробовали это?

<?= $this->Html->link('Foobar', ['?' => ['id' => ['1,2,3']]] ?>

Я не вижу большого смысла в том, что вы пытаетесь сделать иначе. Просто взорвите() строку на стороне сервера, и вы получите свой массив с менее надежным и длинным URL-адресом.

Думаю, вы пытаетесь или, по крайней мере, так выглядите, отправлять данные формы через get. Очевидно, что ссылка по умолчанию (это ссылка не форма!) Метода HtmlHelper не будет делать этого, потому что вам нужно будет указать дублирующие ключи массива.

Попробуйте использовать метод FormHelper :: postLink() и установите метод для get. Если это не работает, расширьте форму или HtmlHelper и реализуйте то, что вам нужно, перегружая методы или добавляя новый метод.

  • 0
    это не тот вывод, который я хотел бы получить. это приведет к id [] = 1,2,3, а не id [] = 1 & id [] = 2 & id [] = 3
  • 0
    Почему отрицание !? Вы могли бы объяснить это в первую очередь. Смотрите мой обновленный ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню