в Symfony2 FOSRestBundle аннотации
кто-нибудь использовал put, get, post, delete аннотации(https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Controller/Annotations/) в контроллере.
Я пытаюсь использовать его так, но он по-прежнему требует методов get. Какова цель этих аннотаций в FOSRestBundle
/**
* @Route("/get/{id}", defaults={"_format" = "json"})
* @Post
*/
public function getObject($id) {
$object = $this->getService()->findById($id);
return $object;
}
2 ответов
Я хочу поделиться информацией обо всех аннотациях.
@Get, @Post, @Put, @Delete, @Head, @Patch являются ярлыками для метода @Route + @, вместо того, чтобы использовать их оба, вы можете просто указать один, например:
/**
* @Get("/hello/{id}")
*
*/
public function helloAction($id)
{
return array();
}
информация о @View находится в 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
название префикса можно добавить либо к маршрутизирующий.файл yml или как аннотация. Это также документировано - https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Resources/doc/6-automatic-route-generation_multiple-restful-controllers.md:
иногда автоматическое присвоение имен маршрутам приведет к столкновениям имен маршрутов, поэтому Коллекции маршрутов RestBundle предоставляют name_prefix (name-prefix для xml / yml и @NamePrefix для аннотаций) параметр:
#src/Acme/HelloBundle/Resources/config/users_routes.yml comments:
type: rest
resource: "@AcmeHelloBundle\Controller\CommentsController"
name_prefix: api_
С эта конфигурация, имя маршрута станет: api_vote_user_comment
@Prefix особенно полезно, когда у вас есть родительский ресурс и вам нужно добавить префикс перед дочерним. Пример:
родители:
class UsersController extends Controller
{
public function getUserAction($slug)
{} // "get_user" [GET] /users/{slug}
}
ребенок:
class CommentsController extends Controller
{
public function getCommentAction($slug, $id)
{} // "get_user_comment" [GET]
}
теперь действие getCommentAction соответствует / пользователи / {slug} / комментарии / {id} путь.
с префиксом @("some_prefix") сгенерированный путь будет /пользователи/{слизень}/some_prefix / комментарии / {id}
и с помощью @NoRoute аннотация уровня метода, маршрут не будет сгенерирован.
вы не должны помещать идентификатор в маршрут (так как это эквивалентно get). Вместо этого вы должны сделать это, чтобы заставить ID param быть отправлены через $_POST
/**
* @Route("/get", defaults={"_format" = "json"})
* @Post
*/
public function getObject() {
$id = $this->Request::createFromGlobals()->request->get('id');
$object = $this->getService()->findById($id);
return $object;
}