Передача значений искажает мои URL - PullRequest
0 голосов
/ 29 ноября 2011

Только что обновил с 1.3 до 2.0.3 и я пытаюсь перенести все изменения. Я замечаю, что следующая строка

echo $this->Html->link('Quote', array('controller'=>'crm_quotes', 'action'=>'index', $lead['id'].'/'.$crmContact['CrmContact']['id']), null);

строит URL "/crm_quotes/index/15/21". Когда я нажимаю на ссылку, я попадаю на URL:

"/crm_quotes/index/15%2F212

поэтому он заменяет символы на html #, но в конечном итоге разрывает ссылку.

Когда я вручную изменяю URL на правильный:

"/crm_quotes/index/15/21"

страница загружается.

Может кто-нибудь просветить меня? Должен ли я использовать функцию url вместо ссылки?

У меня много страниц, которым нужно передать несколько параметров в URL. Я использовал именованные параметры, но после прочтения некоторых комментариев Марка Стори я решил остановить именованные параметры, поскольку он намекнул на их возможное удаление из будущих версий.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

В качестве ответа на вашу проблему: просто извлеките объединенный символ '/' и передайте идентификаторы как отдельные значения в этом массиве. Следует автоматически устанавливать косые черты между ними.

echo $this->Html->link('Quote', array(
    'controller'=>'crm_quotes', 
    'action'=>'index', 
    $lead['id'],
    $crmContact['CrmContact']['id']
));

По теме кодирования: я думаю, что проблема здесь в том, что он не знает, что вы намерены считать / допустимой частью URL, а не просто текстом. Поведение по умолчанию заключается в кодировании резервных символов, чтобы избежать этой проблемы, поэтому он получает кодированный URL.

Вот аналогичный вопрос и ответ о кодировке URL в целом .

0 голосов
/ 29 ноября 2011

Передайте дополнительные параметры правильным (торт) способом.Cake кодирует любой / в URL, который он специально не устанавливал;Я еще не выяснил, как это предотвратить.

echo $this->Html->link('Quote', array('controller'=>'crm_quotes', 
                              'action'=>'index', 
                               $lead['id'],
                               $crmContact['CrmContact']['id']), null);
...