Kann ich Setup-Routen in Kohana nur bestimmte HTTP-Methoden (GET / POST / etc) entsprechen

StackOverflow https://stackoverflow.com/questions/1128777

  •  13-09-2019
  •  | 
  •  

Frage

Ich erforsche ein paar PHP-Frameworks und der aktuelle Spitzenreiter ist Kohana.

eine Rails-Hintergrund Nachdem ich geworden bin verwendet, was die Schienen Gemeinde nennt „RESTful“ Routen. So ein „GET / posts“ zeigt alle Beiträge und wird durch den Index-Methode der Beiträge Controllers behandelt. A „POST / Beiträge“ erstellt einen neuen Post-Objekt und wird durch eine andere Methode der Beiträge Controllers behandelt.

Da der Weg in diesen beiden zwei Anfragen identisch ist, muss der Router Entscheidungen basierend auf dem HTTP-Methode.

Ist der Router in Kohana der Lage, dies zu tun?

War es hilfreich?

Lösung

Kohana unterstützt nicht RESTful Routen standardmäßig, aber es ist ein Modul rel="noreferrer"> die Unterstützung hinzufügt dafür. Sehen Sie sich die RESTful Wiki für die Nutzung.

Kohana v3.x unterstützt RESTful Controller direkt. Nur verlängern Controller_REST statt Controller und all die Routenaktion wird die Anfrage Methode. (A POST Anfrage action_post gezielte würde, usw.)

Andere Tipps

Sie können auch diese Zeilen zu Ihrer Steuerung vor () -Methode hinzu:

if ($this->request->method() == "POST")
{
  $this->request->action("post_".$this->request->action());
}

so GET / Controller / Beiträge werden von dem action_posts () -Methode in Ihrem Controller gehandhabt werden, während POST / Controller / Beiträge werden von dem action_post_posts () Methode behandelt werden.

PS: Das eingebaute in Controller_REST entfernt wurde in Kohana 3.2

die HTTP-Methode in der Klasse Konstruktor Überprüfung fühlt sich an wie ein schlechtes Design zu mir. Wie Rails, Kohana 3.3 kann RESTful Routen im Router erstellen (wo sie hingehören).

Überprüfen Sie die Dokumentation aus für Kohana 3.3 Routen Filter .

Hier ist ein Beispiel:

Route::set('Posts', 'posts/<id>', array('id' => '\d+'))
  ->filter(function($route, $params, $request) {
    $params['action'] = strtolower($request->method());
    return $params;
  })
  ->defaults(array(
    'controller' => 'Post',
  ));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top