2012-02-09 57 views
0

我的基本控制器有以下幾點:的Kohana 3:設置/獲取提示信息和會話

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。這是因爲會話通過基本控制器重置嗎?我該怎麼做才能避免這種情況?

回答

0

爲什麼你這麼複雜簡單的事情?有沒有需要使用會話的錯誤處理...

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(); 
+0

@martino感謝,但我更願意理解爲什麼會話變量被重置,如果有一種變通方法。 – xylar 2012-02-09 11:44:19

+1

嘗試僅刪除2個重定向,然後看看會發生什麼 – matino 2012-02-09 12:15:20

+0

謝謝你的工作。如果重定向到不同的控制器,會話值將保留,我需要更改哪些內容? – xylar 2012-02-10 09:36:37