Краткие функции из библиотеки Codeigniter
В моем пакете Codeigniter установлена библиотека Tank Auth, проблема в том, что мне не нравится, как is_logged_in
функции нужно вызывать, потому что это просто долго и не так дружелюбно, как мне нужно использовать:
$this->tank_auth->is_logged_in()
Каждый раз, когда я хочу проверить, вошел ли пользователь в систему... Так есть ли способ сделать его короче? Говоря короче, я имею в виду что-то вроде $this->logged();
?
Буду очень признателен, если кто-нибудь сможет мне помочь.
Спасибо.
3 ответа
Голова в tank_auth
библиотека и определить новую публичную функцию:
public function logged(){
return $this->is_logged_in();
}
Теперь вы можете получить к нему доступ с $this->tank_auth->logged();
Если вы хотите сократить имя tank_auth
вам придется переименовать класс и имя файла.
ОБНОВИТЬ:
Более важный вопрос: почему вы звоните так много раз, что это становится раздражением? Вы должны написать его только один раз, если ваш код соответствует принципу "Не повторяйся" (СУХОЙ).
Взгляните на пост в блоге Фила Стерджена под названием Keeping It DRY. Он покажет вам, как написать базовый контроллер, от которого будут наследоваться все ваши контроллеры. Если вы пишете проверку входа в систему в конструкторе базового контроллера, вам не нужно записывать его на каждом контроллере.
Я бы не согласился сделать это как метод logged()
в вашем случае не хватает контекста. Однако, если вы хотите сделать это, вы можете написать базовый контроллер, который имеет logged()
метод, который в конечном итоге возвращает $this->tank_auth->is_logged_in()
, Все контроллеры наследуются от этого базового контроллера, что неплохо для начала.
Если вы используете библиотеки, вы можете реализовать в них похожий шаблон.
Вы, вероятно, не хотите ничего редактировать в TankAuth
библиотека, если вы не создали ее, так как это влияет на обновляемость библиотеки. Вместо этого вы можете добавить метод к вашему контроллеру logged
и пусть он дотянется до Tank Auth. Хотя я бы выбрал лучшее название для вашей функции, как указано в предыдущем ответе.
Создайте или отредактируйте базовый класс вашего контроллера, чтобы он был примерно таким:
function is_logged() {
return $this->tank_auth->is_logged_in();
}
Тогда вы можете назвать это так: $this->is_logged();