2015-05-15 5 views
0

У меня есть простой код, где я поместить его в конструкторе моего контроллераприменяются коды ко всему контроллеру в 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"); 

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

Благодарим за помощь.

+3

создать [контроллер ядра] (https://ellislab.com/codeigniter/user-guide/general/core_classes.html) и распространить на него другие. –

ответ

1

Мне нравятся все ответы, но лучший подход - использовать крючки. Первый Добавьте это в hooks.php

$hook['display_override'] = array(
    'class' => 'RouteProcess', 
    'function' => 'afterroute', 
    'filename' => 'RouteProcess.php', 
    'filepath' => 'hooks', 
    'params' => array() 
); 

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

2

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

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

+1

избегать функции 'parent :: __ construct();' http://stackoverflow.com/a/30257004/1418750 –

+0

Спасибо за эту очень полезную информацию. – vsogrimen

1

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

Интеграционные детали доступны на руководстве пользователя click here

1

Вы могли бы расширяет CI_Controller по умолчанию через каталог ядра

в применении/ядро ​​/ 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 для получения дополнительной информации.

Смежные вопросы