#php #cakephp #routes #cakephp-1.3
#php #cakephp #маршруты #cakephp-1.3
Вопрос:
Я хочу следующий тип URL-адреса с использованием cakephp.
http://localhost/project1/controller1/action1/[{"user_id":"1","udid":"","msg":"","nick_n":"Danis","post_t":"2011-10-21 12:15:00","source":"A"}]/50
где [{"user_id":"1","udid":"","msg":"","nick_n":"Danis","post_t":"2011-10-21 12:15:00","source":"A"}]
и 50 являются аргументами.
Я написал следующую строку в /app/config/routes.php досье.
Router::connect('/controller/action/*', array('controller' => 'controller1', 'action1' => 'actionName'));
Но когда я отлаживаю указанный выше URL-адрес, я не получаю аргумент в формате json.
Вот мое действие.
function action1($arg1 = NULL, $arg2 = NULL) {
// I am getting 50 in $arg1 and $arg2 = NULL.
}
Пожалуйста, скажите мне, если я что-то пропустил здесь. Я не получаю аргумент в формате json в $ arg1.
Спасибо.
Ответ №1:
проблема вызвана символом «:».
В CakePHP вы можете задать именованные параметры в URL, поэтому, если у вас есть URL, например:
mysite.com/name:John
cake сгенерирует $this->params['named']
массив в контроллере. В вашем случае cake идентифицирует «:» в URL-адресе и попытается также создать именованный параметр. к сожалению, url-кодирование параметра не решит проблему
вы можете изменить разделитель для именованных параметров.. но я бы сказал, что лучший способ продолжить — создать пользовательский класс маршрута только для этого конкретного URL, а остальная часть сайта будет использовать обычный класс маршрута
Надеюсь, это поможет