无法调用CakePHP setFlash函数

时间:2012-09-18 17:21:03

标签: php cakephp authentication

我的客户端继承了一个不完整的CMS,我正在尝试帮助他们修复它。请记住,我来自前端开发,有些逻辑可能对你们中的一些人显而易见。

所以我设法几乎完成并更好地使用CMS,但是存在登录问题。如果用户输入正确的用户名和密码,则一切正常。

然而,向用户表明何时出现错误,例如“重试输入密码”或更好的措辞信息将是一种简单的礼貌。但现在没有任何事情发生。

所以我查看了代码,最后比较了这两个文件:

login.ctp(视图,据我所知)

<?php
    echo $this->Session->flash('auth');
?>

<div id="loginColumns">

    <!-- input fields -->
    <div id="loginLeftColumn">
        <?php
            echo $this->Form->create('User',array('action'=>'login'));
            echo $this->Form->input('username');
            echo $this->Form->input('password');
        ?>
    </div>

    <!-- login button -->
    <div id="loginRightColumn">
        <?php echo $this->Form->end('Continue'); ?>
    </div>

</div>

UsersController.php(控制器,顾名思义)

<?php
    class UsersController extends AppController
    {
        var $name = 'Users';
        public $scaffold;


        public function beforeFilter()
        {
            $this -> Auth -> allow(array('login', 'logout'));
        }


        public function login()
        {
            if($this -> request -> is('post'))
            {
                if($this -> Auth -> login())
                {
                    $this -> redirect($this -> Auth -> redirect());
                }
                else
                {
                    // this does not work, maybe because there is no session yet
                    // when users have not logged in yet?
                    $this -> Session -> setFlash(__('Invalid username or password, try again'));
                }
            }
        }


        function logout()
        {
            $this -> redirect($this -> Auth -> logout());
        }
    }
?>

正如您所看到的,在登录时似乎有一些处理错误的东西,但没有任何显示。一旦用户登录,该setFlash函数就会在几个地方使用,它就像魅力一样。

我有什么方法可以在用户登录之前使用它,或者我是否必须从头开始重新创建它?如果是这样,有什么可能会导致这样做,所以看起来和感觉相似?

谢谢!

3 个答案:

答案 0 :(得分:0)

坚持在你的观点中使用它:

<?php echo $this->Session->flash(); ?>

这将显示您在控制器中设置的Flash消息。

答案 1 :(得分:0)

app/View/Layouts/default.ctp文件中添加以下行:

<?php  
   echo $this->Session->flash(); 
?>

答案 2 :(得分:0)

public $components = array('Session');

检查并添加“session”组件,如果它在AppController类中没有默认设置,则添加

<?php echo $this->Session->flash('your message'); ?> 

到您的观点!