【问题标题】:Kohana 3: set/get flash messages and sessionsKohana 3:设置/获取 Flash 消息和会话
【发布时间】:2012-02-09 10:23:10
【问题描述】:

我的基本控制器具有以下功能:

protected $session;

public function before()
{
    parent::before();

    $this->session = Session::instance();
}

我扩展了这个控制器,当用户尝试登录时,如果没有填写用户名/密码,我会重定向用户:

if($this->request->method() == Request::POST)
{
    $username = $this->request->post('username');
    $password = $this->request->post('password');

    if(strlen($username) == 0)
    {
        $this->session->set('error', 'Please enter a Username');
        Request::current()->redirect('user/login');
    }

    if(strlen($password) == 0)
    {
        $this->session->set('error', 'Please enter a Password');
        Request::current()->redirect('user/login');
    }
}

$error = $this->session->get_once('error');

$view = View::factory('user/login');
$view->bind('title', $title);
$view->bind('error', $error);
echo $view->render();

但是 $error 参数在返回时始终为 NULL。这是因为会话正在通过 Base 控制器重置吗?我应该怎么做才能避免这种情况?

【问题讨论】:

    标签: session kohana kohana-3


    【解决方案1】:

    为什么你把简单的事情搞得这么复杂?不需要使用会话进行错误处理...

    if($this->request->method() == Request::POST)
    {
        $username = $this->request->post('username');
        $password = $this->request->post('password');
    
        if(strlen($username) == 0)
        {
            $error = 'Please enter a Username';
        }
    
        if(strlen($password) == 0)
        {
            $error = 'Please enter a Password';
        }
    }
    
    $view = View::factory('user/login')
        ->bind('title', $title)
        ->bind('error', $error);
    echo $view->render();
    

    【讨论】:

    • @martino 谢谢,虽然我更想了解为什么会重置会话变量以及是否有解决方法。
    • 尝试只删除 2 个重定向然后看看会发生什么
    • 感谢工作。如果重定向到不同的控制器,我需要更改什么才能保留会话值?
    • 会话/重定向允许用户在未成功发布表单后刷新表单,而不会出现表单重新提交对话框。
    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多