2012-10-24 31 views
0

我必须混合使用Symfony2和ExtJS4。所有视图都需要使用ExtJS渲染,而不是树枝。ExtJS4&Symfony 2

所有的应用程序都在安全区域,只有成员才能访问它。

当用户启动应用程序时,主要视口与登录表单一起显示。连接后,显示整个应用程序。

事实上,/路径需要显示视口。它会调用一个ajax请求来检查用户是否连接。

如果是,如果不启动应用 ,显示登录表单

而且我不知道该怎么做,该/动作在我的控制器等待回应,我只想推出的JavaScript。

编辑:登录表单必须与ExtJS。

security.yml

firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     login: 
      pattern: ^/login$ 
      security: false 

     secured_area: 
      pattern: ^/ 
      form_login: 
       check_path: /login_check 
       login_path: /login 
      logout: 
       path: /logout 
       target:/

和在loginAction

public function loginAction() 
    { 
     if ($this->get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
      $error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
     } else { 
      $error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR); 
     } 

     $json = json_encode(array(
      'username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME), 
      'error'   => $error, 
     )); 
     $response = new Response($json); 
     $response->headers->set('Content-Type', 'application/json'); 

     return $response; 
    } 
+0

犯错,所以有什么问题,你尝试过什么?代码请。 – Amalea

+0

编辑与安全和登录操作 –

回答

2
过程

应该 -

  1. 进行AJAX调用login_check
  2. 阅读JSON响应到对象并检查设置的任何变量以表示成功或f ailure
  3. 如果用户没有登录,显示登录窗口
  4. 在登录按钮的单击事件,使另一个Ajax调用记录他们在
  5. 如果他们进行身份验证,返回一个变量通过通知json,并显示该应用程序,如果不给他们提示消息中出现了什么问题。

-

var login = Ext.create('Ext.window.Window', { 
    id: 'login', 
    height: 200, 
    width: 350, 
    layout: 'anchor', 
    modal: true, 
    title: 'Welcome, Please Login', 
    items: [ 
     this.username = Ext.create('Ext.form.field.Text', { 
      fieldLabel: 'Username' 
     }), 
     this.password = Ext.create('Ext.form.field.Text', { 
      fieldLabel: 'Password' 
     }), 
     this.submit = Ext.create('Ext.button.Button', { 
      text: 'Login' 
     }) 
    ] 
}); 

login.submit.on('click', function (btn, e, eOpts) { 
    Ext.Ajax.request({ 
     scope: this, 
     params: { 
      username: login.username.getValue(), 
      password: login.password.getValue() 
     }, 
     url: 'yoursite/login', 
     success: function(response, opts) { 
      var obj = Ext.decode(response.responseText); 
      if (obj.logged_in === true) { 
       //Show App 
      } else { 
       //Display error message 
      } 
     } 
    }); 
}); 

Ext.Ajax.request({ 
    scope: this, 
    url: 'yoursite/login_check', 
    success: function(response, opts) { 
     var obj = Ext.decode(response.responseText); 
     if (obj.username === null) { 
      //Show Login window 
      login.show(); 
     } else { 
      //Logic to show app if logged in 
     } 
    } 
}); 
+0

是的,但实际上/登录应该是返回json的form.load()函数,以检索使用的最后一个用户名。而/ login_check应该是表单提交的url。 但是,如果我到达我的网站的根目录,symfony在extjs加载之前处理登录部分。所以/ login可以在我打电话给ajax之前调用。 –

+0

那么你想找到一种方法来决定是否显示登录表单?上述方法绝对应该为此工作,因为它只会在检查您是否登录后才显示登录表单。我可能需要更清楚地解释您的问题,体系结构和限制以帮助解决更多问题,因为我不太了解您的情况。 –