Функция доступа в контроллере от помощника
-
06-07-2019 - |
Вопрос
Я только начал использовать CodeIgniter несколько часов назад и столкнулся с некоторыми проблемами. Я пытаюсь вызвать функцию, которая в данный момент находится в контроллере с именем admin.php
. Я пытаюсь получить доступ к этому от помощника. Как бы я сделал это правильно? Я перепробовал почти все, но, похоже, ничего не работает, поскольку я получаю следующую ошибку:
Fatal error: Call to a member function login() on a non-object
Любая помощь по этому вопросу будет принята с благодарностью
Решение
Я согласен с Jimyi. Ваши вспомогательные и библиотечные классы должны быть независимыми от любого конкретного контроллера в приложении. Если у вас есть " заголовок страницы " помощник, например, это не должно зависеть от какого-либо конкретного поведения вашего администратора. Что, если вы хотите использовать помощник по страницам в другом приложении, в котором нет контроллера администратора? Или что, если вы внесете изменения в контроллер администратора в будущем, теперь вы должны убедиться, что эти изменения не сломают ваш помощник.
Если вашей вспомогательной функции требуется какой-то конкретный бит данных, который имеется у администратора, вы можете передать его в качестве параметра функции из контроллера. Таким образом, помощник является зависимостью от контроллера, а не контроллером является зависимость от помощника.
Кроме того, это сообщение об ошибке означает, что независимо от того, что вы вызываете, не было должным образом создано. Так что вы, вероятно, делаете что-то вроде:
$this->load();
из помощника. Однако в помощнике
$thisне определено (следовательно, ошибка «не объект»). CodeIgniter предоставляет способ загрузки моделей, библиотек и представлений вне контроллера. Но, насколько я знаю, это не позволяет вам делать это для контроллеров. Это нормально, хотя, по причинам, указанным выше. Будьте осторожны, когда вводите зависимости.