Какой правильный способ использовать URL CakePhp?
-
26-09-2019 - |
Вопрос
Это мой первый пост здесь :)
У меня есть какие-то трудности с управлением URL-адресами и параметрами. Я прошел через документацию API класса маршрутизатора снова и снова и не нашел ничего полезного.
Прежде всего, я хотел бы знать, есть ли какой-либо «универсальный» формат в CakePhP (1.3) для обработки URL. Я в настоящее время обрабатываю все мои URL-адреса как простые массивы (в формате, который принимает ссылку на маршрутизатор :: 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 в контроллере содержит префикс встроенный в действие (то есть [действие] => 'admin_edit'), а результат маршрутизатора :: parse () не делает. Оба, конечно, имеют префикс в собственном ключ.
Чтобы обобщить, как я могу преобразовать URL-адрес между любым из этих 3 (или 4, если вы включите префикс) Указанные форматы правильно? Конечно, было бы легко взломать путь через это, но я все равно хотел бы поверить, что торт разрабатывается кучу людей, у которых есть гораздо больше опыта и проницательности, чем я, поэтому я предполагаю, что есть хороший Причина этого «воспринимаемого плохого поведения».
Я пытался представить мою проблему так же хорошо, как я могу, но из-за моих ржавых английских навыков я должен был взять несколько объездов :) Я объясню больше, если это необходимо.
Решение
«Официальный» формат для URL-адресов торта должен быть нотацией массива array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true)
. Отказ Всякий раз, когда вы пишете URL-адреса, вы должны использовать этот формат. Класс маршрутизатора переводит те ни в любую строки (/admin/foo/bar/baz
) или информация, необходимая для диспетчера (array('named' => array(), 'pass' => array(), …)
), в зависимости от того, где используется URL.
Вы должны подумать об этом с точки зрения того, какие действия контроллера вы хотите вызвать. URL (как строки) - это только необходимое зло, чтобы выполнить это в веб-контексте. Вам не должно быть никаких необходимости использовать формат диспетчера. Вы также должны не использовать ссылку строки при указании URL-адресов, поскольку они не могут быть изменены, если вы когда-нибудь хотите изменить свою схему URL.
Может быть, вы могли бы объяснить с примером, почему вам нужно преобразовать эти три формы от одного на другой?