применить коды ко всему контроллеру в codeigniter

у меня есть простой код, где я помещаю его в конструктор моего контроллера

$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");

Я использую этот код для безопасности выхода из системы. мой вопрос, есть ли способ поставить / объявить мой код как глобальный для каждого из моих контроллеров? потому что будет сложно жестко закодировать все на конструкторе каждого контроллера.

Спасибо вам за помощь.

0

Решение

Мне нравятся все ответы, но лучший подход — использовать хуки.
Сначала добавьте это в ваш 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 () вашего контроллера, который может быть переопределен.
Это будет называться несмотря ни на что.

1

Другие решения

Создание основного контроллера может быть хорошим, но оно будет применяться к каждому контроллеру в вашем приложении, проблема в том, что если у вас есть общедоступная страница, к которой вы не хотите применять эти параметры.

Я предлагаю создать контроллер в вашей папке 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 { вам нужно включить контроллер администратора, чтобы вы могли расширить его.

2

Вы можете использовать CI-хуки и использовать post_controller_constructor точка подключения для вызова метода ловушки и добавления заголовков в ловушку.

Подробности интеграции доступны в руководстве пользователя кликните сюда

1

Вы можете расширить 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 для дополнительной информации.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector