2

所以情况如下:

我正在使用 Js 助手在 CakePHP 中创建 ajax 登录表单,并将其放在我的视图中:

<?php 
$data = $this->Js->get('#UserLoginForm')->serializeForm(array('isForm' => true, 'inline' => true));
      $this->Js->get('#UserLoginForm')->event(
        'submit',
        $this->Js->request(
          array ('controller' => 'users', 'action' => 'login'),
          array (
                  'update' => '#messagediv',
                  'before' => '$("#loading").fadeIn()',
                  'complete' => '$("#loading").fadeOut()',
                  'data' => $data,
                  'async' => true,    
                  'dataExpression'=>true,
                  'method' => 'POST',
                )
          )
      );
?>

然后在下面我有我的表格,下面我有:

<?php echo $this->Form->create('User');
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('submit);
?>


<?php echo $this->Js->writeBuffer(); ?>

现在我不知道如何在控制器中使用适当的功能来检查登录并在成功时重定向或在不成功时显示错误..

如果登录详细信息正确,我可以检查登录和回显 1,如果不正确,则回显 0,但是每当我尝试在控制器功能中使用重定向时,它只会在 div #messagediv 中加载“整个登录页面”...

这就是我的控制器操作现在的样子:

public function login() {
    if ($this->request->isAjax()) {
      $this->layout = 'ajax';

      if ($this->Auth->login()) {
        $this->Session->setFlash('Login Successfull');
      } else {
        $this->Session->setFlash('Login Incorrect');
      }

    }
  }

谁能告诉我我做错了什么?

那么登录成功后如何重定向,如果用户名或密码错误,如何将错误消息输出到#messagediv?

4

2 回答 2

1

如果我正确理解您要执行的操作(仅加载 Flash 消息而不是整个页面),请更改您的操作,如下所示:

public function login() {
    if ($this->request->isAjax()) {
        $this->layout = 'ajax';

        if ($this->Auth->login()) {
            $this->Session->setFlash('Login Successfull');
            $this->redirect('wherever');
        } else {
            $this->Session->setFlash('Login Incorrect');
            $this->render('messagediv');
        }    
    }
}

然后在 View/Users/messagediv.ctp 创建一个视图,只包含echo $this->Session->flash();

可能还有其他方法可能会更好,但我不确定这取决于您的确切用途。这应该可以解决您正在尝试做的事情(如果我没记错的话)。

于 2013-07-14T22:51:38.827 回答
0

尝试将 RequestHandler 添加到您的 $components 数组中。

var $components = array("RequestHandler");
于 2015-01-23T00:13:51.950 回答