2012-04-13 10 views
0

Ich erwäge Lucarast RESTler mit (http://luracast.com/products/restler/)Kann ich mit RESTler eine Methode anders als post() oder postSomething() benennen, wenn sie Argumente über einen HTTP-Post akzeptieren muss?

Meine PHP-Klasse hat eine Methode namens 'lösen' und es muss ein Argument über POST

class Solver 
{ 
    function solve($request_data) 
    { 
    ... 
    } 
akzeptieren

Wenn ich einfach die Methode "lösen" nennen, kann nicht über POST zugegriffen werden. Ich bekomme 404.

POST http://localhost/path/to/my/method 404 (Not Found) 

Offenbar muss ich es "postSolve" nennen, das funktioniert. Oder erstellen Sie eine andere Methode namens "postSolve", die einfach "lösen" aufruft.

public function postSolve($request_data) 
{ 
    return $this->solve($request_data); 
} 

Aber ich kann nicht aufhören zu denken, dass es einen eleganten Weg geben muss, dies zu tun.

Wie kann ich meine Methode aufrufen, was ich will, und sie trotzdem über POST zugänglich machen?

Antwort

1

Ich habe in den letzten Tagen etwas mehr über REST gelernt. Ich brauche keine Methoden, die nichts anderes als get, post, put oder delete heißen.

Bitte auf diese andere Frage. Understanding REST: Verbs, error codes, and authentication

„Im Allgemeinen, wenn Sie denken, dass Sie mehr Verben benötigen, kann es tatsächlich bedeuten, dass Ihre Ressourcen müssen neu identifiziert werden Beachten Sie, dass in REST Sie handeln immer auf eine Ressource oder auf eine Sammlung von Ressourcen. Was Sie als Ressource wählen, ist ziemlich wichtig für Ihre API Definition. "

2

Auto-Routing erfordert, dass Sie die api Methodennamen mit get oder post oder put oder delete Präfix an das jeweilige HTTP-Methode/Verb auf das an diesem example

Aber Sie

Mehr zur Karte kann immer einen PHPDoc-Kommentar im folgenden Format über der API-Methode verwenden, um eine beliebige Methode dem POST zuzuordnen

@url POST my/custom/url/:myvar

Zum Beispiel

class CustomPost 
{ 
    /** 
    * @url POST custom/:id 
    * @url GET custom 
    */ 
    function anyName($id) 
    { 
     //do something 
    } 
}