0

Symfony2 と ExtJS4 を混同する必要があります。すべてのビューは、小枝ではなく、ExtJS でレンダリングする必要があります。

すべてのアプリケーションは安全な場所にあり、メンバーのみがアクセスできます。

ユーザーがアプリケーションを起動すると、ログイン フォームとともにメイン ビューポートが表示されます。接続後、アプリ全体が表示されます。

実際、 / ルートはビューポートを表示する必要があります。ユーザーが接続されているかどうかを確認するために ajax リクエストを呼び出します。

はいの場合はアプリを起動し、そうでない場合はログインフォームを表示します

それを行う方法がわかりません。コントローラーの / アクションが応答を待っており、javascript を起動したいだけです。

EDIT : ログインフォームは 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;
    }
4

1 に答える 1

2

プロセスは-

  1. login_checkにajax呼び出しを行います
  2. json応答をオブジェクトに読み込み、成功または失敗を示すために設定されている変数を確認します
  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
        }
    }
});
于 2012-10-24T13:24:25.120 に答える