Kohana 控制器继承使用技巧一则
在需要对用户进行验证的网站中,我们需要对每一个需要权限验证的页面进行判断,这在 Kohana 中很容易就可以做到。
利用 Kohana 的控制器继承,我们可以很方便对页面的访问权限进行控制,以下就是一个简单的例子。
假设我们有一个页面 A,用户访问页面 A 必须进行登录。
首先,我们构造一个基本控制器 Susan,这个控制器继承于 Kohana 的 Controller,它的作用是对通过该控制器的请求做出分析,判断该请求是否有效:
class Controller_Susan extends Controller {
public function before()
{
$this->is_login();
}
public function is_login()
{
$session = Session::instance();
if ( ! $session->get( 'is_login' ) )
{
$this->request->redirect( 'login' );
}
}
}
下面我们来构造页面 A 的控制器 Memo,这个控制器继承刚才我们创建的控制器 Susan:
class Controller_Memo extends Controller_Susan {
public function before()
{
parent::before();
}
public function action_index()
{
echo 'Hello, you can <a href="/login/do">Log out</a> now !';
}
}
接下来就是登录控制器 Login,由于这个控制器不需要对用户是否登录做出判断,所以我们把它继承 Kohan 的 Controller,而不是 Susan:
class Controller_Login extends Controller {
public function action_index()
{
$session = Session::instance();
if($session->get('is_login', false) == 1)
{
$this->request->redirect('');
}
echo '<a href="/login/do">Login</a>';
}
public function action_do()
{
$session = Session::instance();
if($session->get('is_login', false) == 1)
{
$session->destroy();
$this->request->redirect('login');
}
else
{
$session->set('is_login', TRUE);
$this->request->redirect('');
}
}
}
这样,一个简单的权限控制就做好了。