Краткие функции из библиотеки 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();

Другие вопросы по тегам