Создайте файл с именем MY_controller.php
(префикс можно изменить в файле конфигурации) в /application/core
:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
//Initialization code that affects all controllers
}
}
class Public_Controller extends MY_Controller {
function __construct()
{
parent::__construct();
//Initialization code that affects Public controllers. Probably not much needed because everyone can access public.
}
}
class Admin_Controller extends MY_Controller {
function __construct()
{
parent::__construct();
//Initialization code that affects Admin controllers I.E. redirect and die if not logged in or not an admin
}
}
class Member_Controller extends MY_Controller {
function __construct()
{
parent::__construct();
//Initialization code that affects Member controllers. I.E. redirect and die if not logged in
}
}
Затем каждый раз, когда вы создаете новый контроллер, вы решаете, для какого доступа ему требуется
class Book extends Member_Controller {
//Code that will be executed, no need to check anywhere if the user is logged in.
//The user is guaranteed to be logged in if we are executing code here.
//If you define a __construct() here, remember to call parent::__construct();
}
Это значительно сокращает дублирование кода, поскольку, если вам нужен другой контроллер участника, отличный от Book
, вы можете просто расширить Member_Controller
. Вместо того, чтобы делать проверки во всех из них.