Я пишу webapp используя CodeIgniter, который требует аутентификации. Я создал модель, которая обрабатывает всю мою аутентификацию. Однако я не могу найти способ получить доступ к этой модели аутентификации из другой модели. Есть ли способ получить доступ к модели из другого режима или более эффективный способ проверки подлинности внутри CodeIgniter?Можете ли вы получить доступ к модели из другой модели в CodeIgniter?
ответ
В общем, вы не хотите создавать объекты внутри объекта. Это плохая привычка, вместо этого, написать чистый API и ввести модель в вашу модель.
<?php
// in your controller
$model1 = new Model1();
$model2 = new Model2();
$model2->setWhatever($model1);
?>
Не обрабатывайте аутентификацию в своей модели. Используйте только модели для взаимодействия с вашей базой данных, или ldap или что-то еще.
Я создал библиотеку Auth, которую я использую для управления аутентификацией и авторизацией. Вы можете получить доступ к такой библиотеке из своих контроллеров.
Кажется, вы можете загружать модели внутри моделей, хотя вы, вероятно, должны решить эту проблему другим способом. См. CodeIgniter forums для обсуждения.
class SomeModel extends Model
{
function doSomething($foo)
{
$CI =& get_instance();
$CI->load->model('SomeOtherModel','NiceName',true);
// use $CI instead of $this to query the other models
$CI->NiceName->doSomethingElse();
}
}
Кроме того, я не понимаю, что говорит Тилл о том, что вы не должны создавать объекты внутри объектов. Конечно, вы должны! Отправка объектов в качестве аргументов мне кажется менее понятной.
Загрузка модели в модель теперь возможна с помощью нового CodeIgniter.
Это хорошая практика? Потому что пользователь Model2 должен знать, что он зависит от Model1. Какова хорошая практика? – Sabya 2009-01-20 15:25:35
Да, лучше практиковать «вводить» зависимость, а также инициализировать Model2 внутри Model1. – Till 2009-01-21 19:57:52
Это не звучит хорошо с суровой точки зрения. Что делать, если у меня есть функция, которая изменяет аспект одной модели и запускает действие для другой модели? – wag2639 2010-06-24 19:31:37