у меня есть простой код, где я помещаю его в конструктор моего контроллера
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");
Я использую этот код для безопасности выхода из системы. мой вопрос, есть ли способ поставить / объявить мой код как глобальный для каждого из моих контроллеров? потому что будет сложно жестко закодировать все на конструкторе каждого контроллера.
Спасибо вам за помощь.
Мне нравятся все ответы, но лучший подход — использовать хуки.
Сначала добавьте это в ваш hooks.php
$hook['display_override'] = array(
'class' => 'RouteProcess',
'function' => 'afterroute',
'filename' => 'RouteProcess.php',
'filepath' => 'hooks',
'params' => array()
);
Затем перейдите в папку hooks / и создайте RoutesProcess.php
Создайте файл ниже:
class RouteProcess{
function afterroute(){
$this->CI =&get_instance();
$this->CI->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0");
$this->CI->output->set_header("Pragma: no-cache");
echo $this->CI->output->get_output();
}
}
Хорошая вещь об этом — это не требует вызова __construct () вашего контроллера, который может быть переопределен.
Это будет называться несмотря ни на что.
Создание основного контроллера может быть хорошим, но оно будет применяться к каждому контроллеру в вашем приложении, проблема в том, что если у вас есть общедоступная страница, к которой вы не хотите применять эти параметры.
Я предлагаю создать контроллер в вашей папке Controllers и создать его так, как вам нравится.
пример:
Родительский администратор
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Admin extends CI_Controller {
public function __construct() {
parent::__construct();
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");
}
}
Контроллер наследуется от админа
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
include APPPATH.'controllers/admin.php';
class Dashboard extends Admin {
public function __construct() {
parent::__construct();
}
}
соблюдать include APPPATH.'controllers/admin.php';
а также class Dashboard extends Admin {
вам нужно включить контроллер администратора, чтобы вы могли расширить его.
Вы можете использовать CI-хуки и использовать post_controller_constructor
точка подключения для вызова метода ловушки и добавления заголовков в ловушку.
Подробности интеграции доступны в руководстве пользователя кликните сюда
Вы можете расширить CI_Controller по умолчанию через основной каталог
в application / core / MY_Controller.php: (часть MY_ определена в вашем config.php)
class BaseController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");
}
}
Тогда в ваших контроллерах используйте:
class ControllerXYZ extends BaseController {
//your code
}
Если у вас есть контроллеры, которые не нуждаются в функциональности от BaseController, просто не расширяйте его от basecontroller, а только от CI_Controller:
class ControllerXYZ extends CI_Controller {
//your code without the headers set
}
Это также имеет преимущество дедупликации большего количества кода, который нужен каждому контроллеру, например, проверяя, вошел ли кто-то в систему, вы можете сделать это так:
class BaseController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate, no-transform, max-age=0, post-check=0, pre-check=0");
$this->output->set_header("Pragma: no-cache");
if(!$this->session->userdata('loggedIn') === True) {
redirect('/loginpage');
}
}
}
Увидеть https://ellislab.com/codeigniter/user-guide/general/core_classes.html для дополнительной информации.