Kohana 控制器继承使用技巧一则

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('');  
        }  
    }  
}  

这样,一个简单的权限控制就做好了。

你可能感兴趣的:(PHP)