Функция доступа в контроллере из помощника

Я только начал использовать CodeIgniter несколько часов назад и столкнулся с некоторыми проблемами. Я пытаюсь вызвать функцию, которая в настоящее время находится в контроллере с именем admin.php. Я пытаюсь получить доступ к этому от помощника. Как бы я сделал это правильно? Я пробовал почти все, но ничего не работает, так как я получаю следующую ошибку:

Fatal error: Call to a member function login() on a non-object

Любая помощь по этому вопросу будет высоко оценена


person curiousgeorge    schedule 21.06.2009    source источник
comment
Хелперы и библиотеки должны быть независимыми от приложения — вам не нужно вызывать функции контроллера из хелперов или библиотек. Не могли бы вы поподробнее рассказать о своем помощнике? Возможно, это код, принадлежащий контроллеру администратора.   -  person jimyi    schedule 22.06.2009


Ответы (1)


Я согласен с Джимми. Ваши вспомогательные и библиотечные классы не должны зависеть от какого-либо конкретного контроллера в приложении. Например, если у вас есть помощник «заголовок страницы», он не должен зависеть от какого-либо конкретного поведения вашего контроллера администратора. Что делать, если вы хотите использовать помощник страницы в другом приложении, в котором нет контроллера администратора? Или что, если вы внесете изменения в контроллер администратора в будущем, теперь вы должны убедиться, что эти изменения не сломают ваш помощник.

Если вашей вспомогательной функции требуется какой-то конкретный бит данных, который есть у контроллера администратора, вы можете передать его в качестве параметра функции от контроллера. Таким образом, помощник является зависимостью контроллера, в отличие от контроллера, являющегося зависимостью помощника.

Кроме того, это сообщение об ошибке означает, что все, что вы вызываете, не было создано должным образом. Итак, вы, вероятно, делаете что-то вроде:

$this->load();

from within the helper. However, in the helper,

$this
is undefined (hence the 'non object' error). CodeIgniter provides a way to load models, libraries, and views from outside of a controller. But, as far as I know, it doesn't allow you to do this for controllers. That's fine though, for the reasons stated above. Gotta be careful when you introduce dependencies.

person GloryFish    schedule 22.06.2009