将JSON数据发布到FOSUserBundle注册,登录,配置文件等

时间:2014-01-31 02:38:06

标签: php ajax json symfony

我没有看到任何关于通过JSON发送请求以使用FOSUserBundle功能的问题,所以我发布了这个问题。我有一个Symfony2项目,主要是为移动使用而设计的(也是AJAX)。我正在使用FOSRestBundle和FOSUserBundle,它们从表单界面运行良好。但是,我希望能够通过将JSON数据发布到注册,登录,查看配置文件等来注册用户。如何做到这一点?甚至可以将JSON数据发送到FOSUserBundle吗?如果可能的话,如果您能举例说明如何注册或获取个人资料等,我会很高兴。

示例FOSUserBundle登录表单:

<form action="/projects/symfony/web/app_dev.php/login_check" method="post">
    <input type="hidden" name="_csrf_token" value="1cdb2c8fa2fb9a52905ddebff3185ac1a3ad708d" />

<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="" required="required" />

<label for="password">Password:</label>
<input type="password" id="password" name="_password" required="required" />

<input type="checkbox" id="remember_me" name="_remember_me" value="on" />
<label for="remember_me">Remember me</label>

<input type="submit" id="_submit" name="_submit" value="Login" />
 </form>
        </div>
    </body>
</html>

1 个答案:

答案 0 :(得分:-1)

这是一个JSON示例 - 它会检测用户是否已登录 “代码”是动作返回的响应, “imageHandler()”是在这种情况下使用js触发的函数,例如使用间隔或按键。当然它不需要参数。 send函数用于将变量发送到控制器,在这种情况下,我使用它来发送带有参数(myImageId)中给出的值的“imageId”变量,myToDo的值相同。

Javascript(这是树枝模板)

    <script language="JavaScript" type="text/javascript">
      function imageHandler(myToDo,myimageId)
       { 
         var xml = ( window.XMLHttpRequest ) ?
             new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

         xml.open("GET", "{{path('imageHandler')}}", true); 
         xml.setRequestHeader("Content-type", "application/json"); 

        xml.onreadystatechange = function() 
        {
            var serverResponse = JSON.parse(xml.responseText);

             if(serverResponse.code == 100 && serverResponse.success)
               {
                       //success
                }
             else if(serverResponse.code == 200) 
               {
                   //not logged in

                }

         } 
            xml.send({imageId: myimageId, toDo: myToDo});   
     }
    </script>


   /* This is the controller, the javascript knows which controller to call by using the "name    annotation"
    */

      /**
        * @Route(name="imageHandler")
        */
        public function imageHandlerAjaxAction(Request $request)
        {
            //If user is not logged in..
            if (false === $this->get('security.context')->isGranted('ROLE_USER')) 
            {
                //return this variables (your choice of course, format: variable=>value)
                $response = array("code"=>200,"success"=>false);

                return new Response(json_encode($response));
            }
       }