Puis-je les routes de configuration dans Kohana à seulement correspondre des méthodes HTTP particulières (GET / POST / etc)

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

  •  13-09-2019
  •  | 
  •  

Question

J'explore quelques frameworks PHP et le front runner actuel est Kohana.

Avoir un fond Rails Je suis habitué à ce que la communauté des rails appelle les routes « RESTful ». Ainsi, un « GET / messages » affiche tous les messages et est géré par la méthode d'index du contrôleur Messages. A « POST / messages » crée un nouvel objet de poste et est géré par une autre méthode du contrôleur Messages.

Depuis le chemin dans ces deux 2 requêtes est identique, le routeur doit prendre des décisions basées sur la méthode HTTP.

Le routeur Kohana capable de le faire?

Était-ce utile?

La solution

Kohana ne supporte pas les routes RESTful par défaut, mais il y a un le module RESTful qui ajoute le support pour ça. Voir wiki RESTful pour l'utilisation.

Kohana v3.x prend en charge les contrôleurs RESTful directement. Il suffit de prolonger Controller_REST au lieu de Controller et l'action de la route sera la méthode de requête. (Une demande de POST serait ciblé sur action_post, etc.)

Autres conseils

Vous pouvez également ajouter ces lignes à votre contrôleur de méthode avant ():

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

GET / contrôleur / postes seront traités par la méthode action_posts () dans votre contrôleur, alors que POST / contrôleur / postes seront traités par la méthode action_post_posts ().

PS: Le Controller_REST intégré a été éliminé Kohana 3.2

Vérification de la méthode HTTP dans le constructeur de classe se sent comme une mauvaise conception pour moi. Comme Rails, Kohana 3.3 peut créer des itinéraires RESTful dans le routeur (où ils appartiennent).

Consultez la documentation Kohana 3.3 Route Filtres .

Voici un exemple:

Route::set('Posts', 'posts/<id>', array('id' => '\d+'))
  ->filter(function($route, $params, $request) {
    $params['action'] = strtolower($request->method());
    return $params;
  })
  ->defaults(array(
    'controller' => 'Post',
  ));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top