我有我的CRUD,但我需要与邮递员做一个POST请求。我一直在阅读一些帖子,但我真的不明白它是如何运作的。
我的路线:
jugador_create:
path: /{_format}
defaults: { _controller: "FutbolBundle:Jugador:new", _format: html }
requirements: { _method: post, _format: html|xml|json }
我的控制器是:
public function newAction(Request $request)
{
$entity = new Jugador();
$form = $this->createCreateForm($entity);
if ($request->getMethod() == 'POST'){
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('jugador_show', array('id' => $entity->getId())));
}}
return $this->render('FutbolBundle:Jugador:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
我如何在邮递员中这样做我可以做一个JSON帖子并创建它?我想我需要使用Json,xml和默认情况进行切换,但我并不真正理解如何使用Json部分。
非常感谢你。
此外,在我的索引中,我已经使用Json和xml进行了切换,但它与GET相比,与POST非常不同。
public function indexAction(Request $request){
$request = $this->getRequest();
$serializer = new Serializer(array(new GetSetMethodNormalizer()),array(new XmlEncoder(), new JsonEncoder()));
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('FutbolBundle:Jugador')->findAll();
switch ($request->getRequestFormat()){
case "json":
$response=new Response();
$response->setContent($serializer->serialize($entities,'json'));
return $response;
break;
case "xml":
$response=new Response();
$response->setContent($serializer->serialize($entities,'xml'));
return $response;
break;
default:
return $this->render('FutbolBundle:Jugador:index.html.twig', array(
'entities' => $entities,
));
}
}
答案 0 :(得分:0)
我的消化情况如下:
实现格式侦听器以避免在所有控制器中重复代码
// initial js object
let initial = {"1293818383": {"xp": 200,"level": 3,"name": "User 1"}, "235489445527289867": {"xp": 300, "level": 1, "name": "User 2"}, "123189273132": { "xp": 100, "level": 3, "name": "User 3" }
}
// convert object to json -- THIS IS START OF QUESTION
let json = JSON.stringify(initial)
// intantiate userArray
var userArray = []
// parse json into js object
var parsed = JSON.parse(json)
for (let obj in parsed){
// use each key of object to get value
userArray.push(parsed[obj])
}
console.log(userArray)
// [ { xp: 200, level: 3, name: 'User 1' }, { xp: 300, level: 1, name: 'User 2' }, { xp: 100, level: 3, name: 'User 3' } ]
之后,您的控制器不应该更改,因为您已经将数据从json转换为常规发布的数据。你可以使用xml格式或者你想要的格式,但是html。
在邮递员中指定标题 在方法/网址下方的标题选项中,只需添加内容类型标题,如下所示。
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if ('json' === $request->getContentType() && $request->getContent()) {
$data = json_decode($request->getContent(), true);
$request->request->replace($data);
}
}
那应该有用
希望它有所帮助。
PD:Si no entiendes todo lo que escrito hazmelo saber。
答案 1 :(得分:-1)
万一有人需要帮助,我实际上使用集合和Symfony的实体非常简单。
$data = json_decode($request->getContent(),true);
$entity->setNom($data["nom"]);
$entity->setEquip($data["equip"]);
... (more sets if you need them)
用于将其插入数据库。
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();