Передача функции для просмотра в CodeIgniter? - PullRequest
4 голосов
/ 21 июня 2011

Можно ли передать функцию представлению в CodeIgniter? Функция в основном проверяет, установлено ли значение сеанса. Например:

public function is_logged(){
    $logged = $this->session->userdata('user_id');

    if ($logged){
        return true;
    } else {
        redirect('index');
    }
}

Теперь я хочу разместить эту функцию на некоторых моих взглядах. так как я могу передать эту функцию в представление? Спасибо.

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Я бы выбрал другой подход, очень похожий на то, что @atno сказал: вы используете шаблон MVC, поэтому выполнение такого рода проверок в вашем представлении «логически» неправильно, а также идет вразрез с подходом DRY.

Я бы выполнил проверку в контроллере, используя функцию, имеющуюся в модели, и загрузил соответствующий вид в соответствии с результатами:

class Mycontroller extends CI_Controller {

     function index() //just an example
     {
        $this->load->model('mymodel');  
        if($this->mymodel->is_logged())
        {
          $this->load->view('ok_page');
        }
        else
        {
          $this->load->view('not_logged_view');
          //OR redirect('another_page','refresh')
        }
    }
}

В вашей модели:

 function is_logged()
 {
    $logged = $this->session->userdata('user_id');

    if ($logged)
    {
        return TRUE;
    } else {
        return FALSE;
    }
 }

Если вам нужно что-то сделать программно, то для каждого метода контроллера (например, проверка входа в систему) вы можете проверить внутри конструктора:

  function __construct()
  {
    parent::__construct();
    // check code here
  }

Таким образом, вы получите проверкуперед вызовом любого метода контроллера, т. е. при инициализации контроллеров.

ОБНОВЛЕНИЕ : использование модели может быть здесь излишним, вы можете просто проверить, что возвращает $ this-> session:

function index() { // or mypage() or whatever

if($this->session->user_data('user_id'))
{
  $this->load->view('ok_page');
}
else
{
  $this->load->view('not_ok_page');
}

}
0 голосов
/ 21 июня 2011

Ты не должен этого делать. Просто поместите этот код прямо в свой макет или просто на ваш взгляд.

Вы также можете создать помощника: http://codeigniter.com/user_guide/general/helpers.html

...