Вопрос

Это мой первый пост здесь :)

У меня есть какие-то трудности с управлением 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.

Может быть, вы могли бы объяснить с примером, почему вам нужно преобразовать эти три формы от одного на другой?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top