2012-10-24 57 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

那麼你想找到一種方法來決定是否顯示登錄表單?上述方法絕對應該爲此工作,因爲它只會在檢查您是否登錄後才顯示登錄表單。我可能需要更清楚地解釋您的問題,體系結構和限制以幫助解決更多問題,因爲我不太瞭解您的情況。 –