2011-10-24 13 views
9

¿Alguien utiliza put, get, post, delete anotaciones (https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Controller/Annotations/) en el controlador.anotaciones de Symfony2 FOSRestBundle

Estoy tratando de usarlo de esta manera, pero todavía se necesita obtener los métodos. ¿Cuál es el propósito de estas anotaciones en FOSRestBundle

/** 
* @Route("/get/{id}", defaults={"_format" = "json"}) 
* @Post 
*/ 
public function getObject($id) {  
    $object = $this->getService()->findById($id); 
    return $object; 
} 

Respuesta

13

quiero compartir información sobre todas las anotaciones.

@Get, @Post, @Put, @Delete, @Head, @Patch son atajos para @Route + @method, en lugar de ellos usando tanto, sólo se puede especificar uno, por ejemplo:

/** 
    * @Get("/hello/{id}") 
    * 
    */ 
    public function helloAction($id) 
    { 
     return array(); 
    } 

Información sobre @View es en el doc: https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/doc/3-listener-support.md

@View //Guess template name 
@View("AcmeHelloBundle::layout.html.twig") //Load Resources/views/layout.html.twig 
@View("AcmeHelloBundle::layout.html.twig", templateVar="test") // if returned data doesn't 
    // have a key (e.g. return array("string", 5) instead of default variable 'data', 
    // it's placed inside 'test' variable inside template. 
@View(statusCode=204) // set HTTP header's status code 

Nombre prefijo puede añadirse al archivo routing.yml o como una anotación. También se documenta - https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/doc/6-automatic-route-generation_multiple-restful-controllers.md:

A veces, rutas denominación automática dará lugar a nombres de ruta colisiones, por lo colecciones ruta RestBundle ofrece una name_prefix (nombre-prefijo para xml/yml y @NamePrefix para anotaciones) parámetro :

#src/Acme/HelloBundle/Resources/config/users_routes.yml comments: 
    type:   rest 
    resource:  "@AcmeHelloBundle\Controller\CommentsController" 
    name_prefix: api_ 

Con esta configuración, el nombre de ruta se convertiría en: api_vote_user_comment

@Prefix es especialmente útil cuando tiene recurso primario y necesita agregar prefijo antes del primer hijo. Ejemplo:

padres:

class UsersController extends Controller 
{ 
    public function getUserAction($slug) 
    {} // "get_user" [GET] /users/{slug} 
} 

niño:

class CommentsController extends Controller 
{ 
    public function getCommentAction($slug, $id) 
    {} // "get_user_comment" [GET] 
} 

Ahora el getCommentAction acción corresponde con /usuarios/babosa {}/comentarios/{id} camino.

Con @Prefix ("some_prefix") generada ruta será/usuarios/babosa {}/some_prefix/comentarios/{id}

Y mediante el uso de la @NoRoute anotación nivel de método, la vía no se generará

2

No debe poner el id en la ruta (ya que es equivalente a un GET). En su lugar debe hacer esto para forzar el parámetro id para ser enviados a través de $ _POST

/** 
* @Route("/get", defaults={"_format" = "json"}) 
* @Post 
*/ 
public function getObject() { 
    $id = $this->Request::createFromGlobals()->request->get('id'); 
    $object = $this->getService()->findById($id); 
    return $object; 
}