Должен ли я продлить контроллер или создать помощник?


0

Мне нужно получить доступ к некоторым функциям в нескольких контроллерах в приложении CodeIgniter. В моменты функция действительно основная и несколько, например:

 generate_random_key() //just a random string 
     is_logged()   //check if user is logged or not 
     logged_user_only() //if unlogged, redirect 
     unlogged_user_only() //if logged, redirect 

Поскольку эти функции связаны для входа, я могу либо поместить их в хелперах файл и поместить в Application/helpers/login_helper.php

ИЛИ

я могу продлить CI_Controller, создавая MY_Controller.php и поместить его в Application/Core/MY_Controller.php

Оба метода работают, но мне интересно whic h лучше подходит для такого рода задач. Я думаю, что должны быть некоторые правила, когда контроллер должен быть расширен или когда помощник должен использоваться?

0

Если вы используете эти функции в своих других контроллерах (и только в других контроллерах), я бы предложил рефакторинг их в MY_Controller. Это также даст вам прямой доступ к экземпляру $ CI (вместо вызова get_instance())

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

EDIT ::

Я рекомендовал бы в MY_Controller в качестве основы, которая содержит функции оболочки AUTH, которые Invoke функциональность из библиотеки, которая управляет такого рода вещи.

  0

generate_random_key должны, вероятно, останется в качестве помощника, хотя 15 июл. 112011-07-15 09:01:40

  0

да, например, мне нужно проверить, если пользователь вошел в систему или нет в разных контроллерах. 15 июл. 112011-07-15 09:03:25

  0

Мне нравится настраивать проверку подлинности в конструкторе MY_Controller. Таким образом, любой контроллер, чем расширяет его, автоматически получает проверку подлинности. Кроме того, вы можете настроить его так, чтобы некоторые контроллеры не нуждались в нем (через некоторые правила управления доступом или, возможно, так же просто, как и параметр конструктора) 15 июл. 112011-07-15 09:06:11


1

IMO, функциональность входа не имеет ничего общего с контроллером. Вот почему я бы, вероятно, поставил функции, которые вы упоминаете, в помощник или библиотеку.


0

Решение, которое я м мышления:

Если вы хотите следовать шаблон проектирования, использовать hook (работает как фильтр с Java точки зрения).

Alternate следует продлив My_Controller