0

我必须混合 Symfony2 和 ExtJS4。所有视图都需要用 ExtJS 渲染,而不是 twig。

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

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

实际上,/路由需要显示视口。它将调用 ajax 请求来检查用户是否已连接。

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

而且我不知道该怎么做,我的控制器中的 / 操作等待响应,我只想启动 javascript。

编辑:登录表单必须使用 ExtJS 制作。

安全.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 回答