Контекст
я нашел много вопросов о частичном ответе API с FOSRest и все ответы основаны на параметрах JMS Serializer (Exlude, включают в себя группы, и т.д). Он отлично работает, но я пытаюсь достичь чего-то менее «статического».FOSRestBundle: частичный ответ в зависимости от атрибутов задаются в запрос
Скажем, у меня есть пользователь со следующими атрибутами: id
username
firstname
lastname
age
sex
Я восстановить этот пользователь с конечной GET /users/{id}
и следующий метод:
/**
* @View
*
* GET /users/{id}
* @param integer $user (uses ParamConverter)
*/
public function getUserAction(User $user) {
return $user;
}
метод возвращает пользователь со всеми его атрибутами.
Теперь я хочу, чтобы что-то вроде этого: GET /users/{id}?attributes=id,username,sex
Вопрос
я пропустил функциональность FOSRestBUndle, JMSserializer или SensioFrameworkExtraBundle добиться его автоматически? Аннотации, метод, ключевое слово в запросе или что-то еще?
В противном случае, что является лучшим способом его достижения?
Код
Я думал сделать что-то вроде этого:
/**
* @View
* @QueryParam(name="attributes")
*
* GET /users/{id}
*
* @param integer $user (uses ParamConverter)
*/
public function getUserAction(User $user, $attributes) {
$groups = $attributes ? explode(",", $attributes) : array("Default");
$view = $this->view($user, 200)
->setSerializationContext(SerializationContext::create()->setGroups($groups));
return $this->handleView($view);
}
И создать группу для каждого атрибута:
use JMS\Serializer\Annotation\Groups;
class User {
/** @Groups({"id"}) */
protected $id;
/** @Groups({"username"}) */
protected $username;
/** @Groups({"firstname"}) */
protected $firstname;
//etc
}
Вы знаете, если есть способ поставить всю эту логику в аннотации (непосредственно внутри @View или внутри новой аннотации)?На самом деле мне нужно исключать поля везде, и код будет строго одинаковым в каждой конечной точке. Я довольно новичок в php и symfony, поэтому, если у вас есть ссылки, я буду признателен. :) –
Это определенно возможно, но я никогда не делал пользовательскую аннотацию, поэтому я не могу реально помочь вам с рекомендациями по внедрению, вам придется самостоятельно изучить эту часть :) –