Передача URL-адреса с URL-адресом в качестве параметра контроллеру / действию в CakePHP - PullRequest
4 голосов
/ 20 января 2011

Я довольно новичок в CakePHP, и из-за этого есть некоторые базовые вещи, которые я делал с Zend Framework, которые я побил Cake.

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

Например: http://www.cakephp.com/controller/action/http%3A%2F%2Fwww.google.com независимо от контроллера и настройки действия, выдаст 404, но передача / controller / action / http://www.google.com работает каким-то образом, единственная проблема в том, что он идентифицирует http как именованный параметр.По-другому, если я сделаю / controller / action? Url = http://www.google.com, это сработает.

Обход, который я использовал для этого, состоит в передаче значения в виде строки, закодированной в base64, но это приноситнекоторые ограничения.Например, если это API, вы не можете гарантировать, что система, использующая API, сможет кодировать base64 строку.

В любом случае, лучшим решением будет передача строки, закодированной в URL, именованнойпараметр.Вопрос в том, почему CakePHP не принимает строку с кодировкой urlencoded в качестве параметра и почему он выдает 404?

Заранее спасибо всем.

1 Ответ

5 голосов
/ 22 января 2011

Я добавил решение этой проблемы.Предыдущий ответ, который указывал на сообщение, фактически отвечал, почему это происходило и одно из решений.Что происходит, так это то, что обходной путь для .htaccess на Apache немного опасен, потому что он отключит критерии безопасности.

Есть 2 способа решить это с помощью кода (и я использую оба):

  1. Отправка всех URL-адресов в виде строк в кодировке base64
  2. Принимайте URL-адреса в качестве именованных параметров, но, как вы заметите, он преобразует любые http: // в http: /, поэтому необходимоправильно определить, когда это происходит, и только затем исправить строку.

Это далеко не красивое решение, но оно определенно практично.

...