Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 最佳实践以及如何在Symfony2中从iOS AFNetworking中查找get POST数据并在get中返回JSON?_Php_Ios_Json_Symfony_Afnetworking - Fatal编程技术网

Php 最佳实践以及如何在Symfony2中从iOS AFNetworking中查找get POST数据并在get中返回JSON?

Php 最佳实践以及如何在Symfony2中从iOS AFNetworking中查找get POST数据并在get中返回JSON?,php,ios,json,symfony,afnetworking,Php,Ios,Json,Symfony,Afnetworking,我正在构建一个移动应用程序(iOS)和Symfony2 REST后端。在Symfony2上,我的路由工作正常,我已经用AJAX和httpie对它们进行了测试,所有CRUD操作等都很好。现在,我正在尝试从应用程序访问路由。到目前为止,我可以访问路由,当我查看Symfony2探查器时,我可以看到最后10个条目中的条目,以验证我是否正在使用POST和GET请求访问服务器。现在,我有两个问题,如果人们能为我指出**最佳实践**的方向,我会很高兴 问题1:虽然我正在发布我可以在“请求”下看到的数据,但当我

我正在构建一个移动应用程序(iOS)和Symfony2 REST后端。在Symfony2上,我的路由工作正常,我已经用AJAX和httpie对它们进行了测试,所有CRUD操作等都很好。现在,我正在尝试从应用程序访问路由。到目前为止,我可以访问路由,当我查看Symfony2探查器时,我可以看到最后10个条目中的条目,以验证我是否正在使用POST和GET请求访问服务器。现在,我有两个问题,如果人们能为我指出**最佳实践**的方向,我会很高兴

问题1:虽然我正在发布我可以在“请求”下看到的数据,但当我尝试创建记录时,它只创建空记录,这意味着数据正在丢失。这是我用于创建用户的控制器,例如:

public function postUserAction(Request $request)
{
    $content = $this->get('request')->getContent();
    $serializer = $this->get('jms_serializer');
    $entity = $serializer->deserialize($content, 'Name\BundleName\Entity\User', 'json');

        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

    return array(
        'entity' => $entity,
    );
}
当我查看日志时,唯一突出的是:请求Cookies(没有Cookies),请求内容:“请求内容不可用(它是作为资源检索的)。”这告诉我数据丢失了,我如何获取数据并使用它?或者可能是什么

问题2:GET返回一个空的JSON响应,没有数据,只有在我记录(回显)时返回的键。我的代码如下所示:

public function getUsersAction()
{
    $em = $this->getDoctrine()->getManager();

    $entities = $em->getRepository('NameBundle:User')->findAll();

    return array(
        'entities' => $entities,
    );
}
从日志中,它设置了请求Cookies:PHPSESSID=>“1ududududjs83883jdlb4ho0j4”,但请求内容再次显示:“请求内容不可用(它作为资源检索)。”我如何让它返回带有JSON的数据?这在浏览器AJAX和httpie测试中运行良好

问题3:使用AFNetworking,我有一个符号常量,我将其设置为APIHost(IP地址),APIPath是文件夹。现在,在我使用本机PHP的早期版本中,我通过发送JSON中的参数来构造要在index.PHP中执行的实际代码,因此如果我想要登录,我会发送类似todo:login的内容,但对于Symfony2,我甚至不确定或不知道这种情况下的最佳实践。理想情况下,我希望在JSON请求中指定服务器端请求,然后在Symfony2中找到正确的路由,但这是如何做到的?如果是,请提供一个示例?解决方法是每次我需要发出请求时,在AFNetworking中指定硬编码路径,我认为请求与代码紧密结合,并且我需要在服务器端的任何时候在很多地方进行更改。谢谢,很抱歉问了这么长的问题

你希望魔术师为你施魔法。但它不会,您必须首先配置它。从您的代码中,我可以看出您使用的jmsserializer是错误的

getUsersAction()
中,您必须返回一个序列化响应,但返回的是一个对象数组。这将是正确的方式:

public function getUsersAction()
{
    $em = $this->getDoctrine()->getManager();

    $entities = $em->getRepository('NameBundle:User')->findAll();
    $serializer = $container->get('jms_serializer');

    return array(
        'users' => $jsonContent = $serializer->serialize($entities, 'json');,
    );
}
您的post操作基本上看起来正常,但是当json不包含实体用户的每个字段时,反序列化将失败。您可以使用注释将实体配置为序列化/反序列化

我不确定我是否理解您的上一个问题,但我认为您必须在应用程序中硬编码路径


Symfony2在编写API时非常有用。但是如果您不想处理序列化/反序列化,可以尝试一下。它基于symfony构建,您可以动态生成api