это мое первое сообщение здесь :)Каков правильный способ использования URL-адресов CakePHP?
У меня возникли трудности с использованием URL-адресов и параметров. Я много раз просматривал документацию api класса маршрутизатора и не нашел ничего полезного.
Прежде всего, я хотел бы знать, существует ли какой-либо «универсальный» формат в CakePHP (1.3) для обработки URL-адресов. В настоящее время я обрабатываю все мои URL-адреса как простые массивы (в том формате, который принимает Router :: url и $ html->), и это легко, поскольку мне нужно передать их только в качестве аргументов для собственных методов торта. Обычно мне сложно, если мне нужно что-то еще.
В основном у меня возникают проблемы с преобразованием строковых URL-адресов в формат базового массива. Скажем, я хочу, чтобы преобразовать $ arrayUrl в строку и чем снова в URL:
$arrayUrl=array('controller'=>'SomeController','action'=>'someAction','someValue');
$url=Router::url($arrayUrl); //$url is now '/path/to/site/someController/someAction/someValue'
$url=Router::normalize($url); //remove '/path/to/site'
$parsed=Router::parse($url); /*$parsed is now
Array(
[controller] => someController
[action] => someAction
[named] => Array()
[pass] => Array([0] => someValue)
[plugin] =>
) */
Это кажется очень много кода, чтобы сделать что-то же просто, как конвертировать между 2 основных форматов. Также обратите внимание, что $ parsed все еще не совпадает с $ arrayUrl. Конечно, я мог бы настроить $ parsed вручную, и фактически я сделал это несколько раз как быстрый патч, но я хотел бы разобраться в этом.
Я также заметил, что при использовании префиксной маршрутизации $ this-> params в контроллере имеет префикс, встроенный в действие (т.е. [action] => 'admin_edit'), а результат Router :: parse() не , Оба, конечно, имеют префикс в собственном ключе.
Подводя итог, как можно преобразовать URL-адрес между любыми из этих 3 (или 4, если вы включите префикс) указанные форматы в правильном направлении? Конечно, было бы легко взломать мой путь через это, но я все же хотел бы поверить, что торт разрабатывается кучей людей, у которых гораздо больше опыта и понимания, чем у меня, поэтому я предполагаю, что есть веская причина для этого «воспринимаемого неправильного поведения».
Я попытался представить свою проблему настолько хорошо, насколько могу, но из-за моих ржавых навыков английского языка мне пришлось взять несколько обходов :) Я объясню больше, если потребуется.
Спасибо за быстрый ответ. Я спросил об этом, потому что не функция Sake, которую я знаю, возвращает этот (массив) формат. В отсутствие реального примера, давайте использовать $ controller-> referer(). Результат referer() - это строка, которую мне нужно преобразовать в массив, чтобы ее изменить. Единственный способ, которым я знаю, это Router :: parse(), который возвращает параметры диспетчера. Если бы я хотел сравнить результат с URL-адресом массива, мне также пришлось бы преобразовать URL-адрес массива в параметры диспетчера, который выполняется через Router :: parse (Router :: normalize (Router :: url ($ arrayUrl))). Нехорошо. – jpeltoniemi
@Pichan Реферрер - интересный случай в том, что это то, что вы можете проанализировать, но в то же время что-то, на что вы не должны уделять такое внимание, в первую очередь. Поскольку у вас действительно не хватает примера, кажется, мой совет стоит. :) – deceze
Предположим, мне нужно сохранить текущий URL-адрес для сеанса, поэтому, когда после выполнения определенной задачи посетитель возвращается на страницу, откуда возникла задача. До сих пор я использовал $ this-> params, который не совпадает с URL-адресами массива, поэтому для того, чтобы они играли хорошо, нужно немного поработать. Я просто хочу, чтобы у вас не было жестких URL-адресов, которые уже доступны контроллеру в некотором формате. Я начинаю думать, что Торт не будет работать со мной на этом, но разве это только торт или мое мышление ошибочно? В конце концов, я довольно зеленый для всего MVC, так что это не было бы сюрпризом :) – jpeltoniemi