在管理员Magento中返回JSON数据

时间:2015-01-28 07:20:08

标签: php ajax json magento

下午好,

我正在尝试在Magento admin中创建AJAX登录。但我不知道Magento登录功能和登录操作会发生什么。我对Magento很新,真的很困惑......

我已经知道有两个地方可以办理登录。

/core/Mage/Admin/Model/Session.php(登录功能)

/core/Mage/Adminhtml/controllers/IndexController.php(登录操作)

返回JSON数据需要做什么?还有 Url index.php/admin/login?)来处理它?<​​/ p>

要清楚,我需要回答两个问题才能自己解决。

  1. 什么是login()函数?它是如何工作的?
  2. 什么是loginAction()函数?它是如何工作的?
  3. 任何帮助将不胜感激。谢谢大家!

2 个答案:

答案 0 :(得分:2)

1)一旦覆盖了IndexController.php,就可以在其中创建AjaxLoginAction。 2)在您的$ .ajax中,您将指定的URL为:

url : Mage::helper("adminhtml")->getUrl("mage_adminhtml/index/AjaxLogin");

//check once if the above url returns your action urls or not 

3)在控制器内部,您可以使用以下命令将输出发送回json中的前端:

$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($reply));
        return;

    //where reply can be a text or can be multidimentional arrray`enter code here`

答案 1 :(得分:1)

Magento Admin表单的默认流程为:

1)当验证成功并且用户输入凭证时,magento会将其发送到Admin / Model / Session.php登录功能。 2)请求有2个参数:

- username
- password
- key(we will get into it later below, lets say key is 123456)
- form_key posted with form by default

3)在登录功能中,magento会检查是否有任何用户存在这些凭据。如果是,请将当前管理员用户设置为此用户表单,该表单中输入了凭据。 4)在此之后,magento将控件重定向到adminhtml / index / index / key / 123456 在这里,您可以看到我们在表单中获得的密钥用于保持真实性。

现在,如果你想把它变成ajax,

创建自定义控制器让我们说AjaxloginAction。在其中您可以编写以下功能:

public function AjaxloginAction(){
    $params = $this->getRequest()->getParams();
    $username = $params['username'];
    $password = $params['password'];
    //call the model function here
    $flag = Mage::getModel('admin/session')->login($username, $password);
    if($flag == true){
        //user if logged in, do further redirection or processing
    }
    else{
        // invalid credentals, return warning on frontend
    }
}

要确保session.php模型默认不重定向,请覆盖它并将其更改为以下内容:

public function login($username, $password, $request = null)
    {
        if (empty($username) || empty($password)) {
            return;
        }

        try {
            /** @var $user Mage_Admin_Model_User */
            $user = Mage::getModel('admin/user');
            $user->login($username, $password);
            if ($user->getId()) {
                $this->renewSession();

                if (Mage::getSingleton('adminhtml/url')->useSecretKey()) {
                    Mage::getSingleton('adminhtml/url')->renewSecretUrls();
                }
                $this->setIsFirstPageAfterLogin(true);
                $this->setUser($user);
                $this->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());

                $requestUri = $this->_getRequestUri($request);
                if ($requestUri) {
                    Mage::dispatchEvent('admin_session_user_login_success', array('user' => $user));
                    //header('Location: ' . $requestUri);
                    //exit;
                    return true;
                }
            } else {
                return 'Invalid User Name or Password.';
            }
        } catch (Mage_Core_Exception $e) {
            Mage::dispatchEvent('admin_session_user_login_failed',
                array('user_name' => $username, 'exception' => $e));
            if ($request && !$request->getParam('messageSent')) {
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
                $request->setParam('messageSent', true);
            }
        }

        return $user;
    }

Hope this helps. :)