Frage

Es ist mein erster Beitrag hier:)

Ich habe einige Schwierigkeiten mit mit Urls und Parametern zu tun. Ich habe über die Router Klasse api Dokumentation gegangen immer und immer wieder und nichts brauchbar gefunden.

Zunächst einmal würde ich gerne wissen, ob es ein ‚universelles‘ Format in CakePHP (1.3) für Urls Handhabung. Ich Handhabung zur Zeit alle meine Urls als einfache Arrays (im Format, dass Router :: url und $ html-> link akzeptiert), und es ist einfach, solange ich sie nur als Argumente für Kuchen der müssen eigene Methoden übergeben. Es wird in der Regel heikel, wenn ich etwas anderes brauchen.

Vor allem habe ich Probleme mit String-Urls dem Grund Array-Format zu konvertieren. Sagen wir, ich $ arrayUrl auf Zeichenfolge konvertieren möchten, und als wieder in 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] => 
) */

Das scheint eine Menge von Code etwas so einfach zu tun, wie zu konvertieren zwischen zwei Kernformaten. Beachten Sie auch, dass analysiert $ ist noch nicht in der gleichen wie $ arrayUrl. Natürlich könnte ich manuell zwicken analysiert $ und tatsächlich habe ich getan, dass ein paar Mal so schnell Patch, aber ich würde auf den Grund zu bekommen.

Ich habe auch bemerkt, dass bei der Verwendung von Präfix-Routing, $ this-> params in der Steuerung das Präfix in der Aktion eingebettet ist (d. [Aktion] => 'admin_edit') und das Ergebnis des Router :: parst () nicht. Beide natürlich das Präfix in einem eigenen Schlüssel.

Um es zusammenzufassen, wie konvertiere ich eine URL zwischen einer dieser 3 (oder 4, wenn Sie das Präfix Sache sind) genannten Formate der richtige Weg? Natürlich wäre es einfach, meinen Weg durch diesen zu hacken, aber ich würde wie immer noch, dass Kuchen zu glauben, wird durch eine Reihe von Menschen, die viel mehr Erfahrung und Einsicht haben als ich entwickelt, so vermute ich, ein gutes es Grund für dieses „gefühlte Fehlverhalten“.

Ich habe versucht, mein Problem so gut vorstellen, wie ich kann, aber aufgrund meiner rostigen Englisch-Kenntnisse, ich hatte ein paar Umwege zu nehmen :) Ich werde erklären, mehr, wenn nötig.

War es hilfreich?

Lösung

Das "offizielle" Format für Kuchen URLs sollte die Array-Notation array('controller' => 'foo', 'action' => 'bar', 'baz', 'admin' => true) sein. Jedes Mal, wenn Sie URLs schreiben, sollten Sie dieses Format verwenden. Die Router-Klasse wird für die wahlweise Strings (/admin/foo/bar/baz) oder Informationen, die für den Dispatcher (array('named' => array(), 'pass' => array(), …)) übersetzen, je nachdem, wo die URL verwendet wird.

Sie sollten denken Sie in Bezug auf denen Controller Aktion, die Sie aufrufen möchten. URLs (als Strings) sind nur ein notwendiges Übel dies in einem Web-Kontext zu erreichen. Es sollte keine Notwendigkeit für Sie das Dispatcher-Format zu verwenden. Sie sollten nicht auch die Zeichenfolge-Notation verwenden, wenn URLs spezifizieren, da diese nicht Reverse-geroutet werden können, wenn Sie jemals Ihre URL-Schema ändern möchten.

Vielleicht könnte man mit einem Beispiel erklären, warum Sie diese drei Formen von einem zum anderen konvertieren?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top