Frage

In CakePHP 3.0 wurden benannte Parameter (Gott sei Dank) zugunsten von Standard-Abfragezeichenfolgenparametern inline mit anderen Anwendungs-Frameworks entfernt.

Was ich immer noch Schwierigkeiten habe, mich zurechtzufinden, ist das zum Beispiel in anderen MVC-Frameworks ASP.NET sie würden die Parameter im ActionResult übergeben (wie bei der Funktion):

Edit( int id = null ) {

    // do stuff with id

}

Und dieser Methode würde die ID als Abfragezeichenfolge wie übergeben: /Edit?id=1 und Sie würden Routing verwenden, um es hübsch zu machen: /Edit/1.

In CakePHP jedoch alles, was innerhalb der Funktionsparameter übergeben wurde, wie:

function edit( $id = null ) {

    // do stuff with $id

}

Muss als übergebener Parameter wie folgt ausgeführt werden: /Edit/1 dies umgeht die Idee der Abfragezeichenfolge und auch die Notwendigkeit des Routings, um die URL zu verbessern.

Wenn ich die Parameter im Link für diese Bearbeitung benenne wie:

$this->Html->link('Edit', array('action' => 'edit', 'id' => $post->id));

Ich muss dann tun:

public function edit() {

    $id = $this->request->query('id');

    // do stuff with $id

}

Um an die übergebene Parameter-ID zu gelangen.Würde denken, es würde es in der Funktion wie in aufnehmen ASP.NET für CakePHP 3.0 aber nicht.

Ich ziehe es vor, den übergebenen Werten im Bearbeitungslink ein Präfix voranzustellen, anstatt sie nur zu übergeben, damit ich mir am anderen Ende nicht so viele Gedanken über die Ordnungszahl machen muss und ich weiß, was sie sind usw.

Hat jemand mit einer dieser Möglichkeiten gespielt, Daten an seine Methoden in CakePHP weiterzugeben, und kann mehr Licht auf die richtigen Vorgehensweisen werfen und wie die Änderungen in Version 3.0 die Dinge in diesem Bereich verbessern werden...

War es hilfreich?

Lösung

In CakePHP 3.0 gibt es einige Arten von Anforderungsparametern.Lassen Sie uns sie überprüfen:

Abfragezeichenfolge:werden mit zugegriffen $this->request->query(), werden nicht als Argumente an Controller-Funktionen übergeben und um eine Verknüpfung herzustellen, müssen Sie Folgendes tun Html->link('My link', ['my_query_param' => $value])

Übergebene Argumente:Der spezielle Argumenttyp ist derjenige, der von der Controller-Funktion als Argument empfangen wird.Auf sie wird entweder als Argument oder durch Überprüfen zugegriffen $this->request->params['pass'].Sie erstellen Links mit übergebenen Argumenten abhängig von der Route, aber für die Standardroute fügen Sie dem Link einfach Positionsparameter hinzu, z Html->link('My link', ['action' => view, $id, $secondPassedArg, $thirdPassedArg])

Parameter anfordern:Übergebene Argumente sind ein Untertyp von diesem.Ein Anforderungsparameter ist ein Wert, der in der Anforderung aus den Informationen bestehen kann, die aus der Route extrahiert werden könnten.Parameter können während ihrer Lebensdauer in andere Parametertypen konvertiert werden.

Betrachten Sie diese Route:

Router::connect('/articles/:year/:month/:day', [
  'controller' => 'articles', 'action' => 'archive'
]);

Wir haben effektiv 3 Anforderungsparameter mit dieser Route erstellt: year, month und day und sie können mit zugegriffen werden $this->request->year $this->request->month und $this->request->day.Um einen Link dafür zu bauen, machen wir:

$this->Html->link(
  'My Link',
  ['action' => 'archive', 'year' => $y, 'month' => $m, 'day' => $d]
);

Beachten Sie, dass diese Parameter nicht als Abfragezeichenfolgenparameter konvertiert werden, da die Route diese Parameter angibt.Wenn wir diese nun in übergebene Argumente konvertieren möchten, verbinden wir stattdessen diese Route:

Router::connect('/articles/:year/:month/:day',
  ['controller' => 'articles', 'action' => 'archive'],
  ['pass' => ['year', 'month', 'day']]
);

Unsere Controller-Funktion wird jetzt so aussehen:

function archive($year, $month, $day) {
  ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top