2008-09-05 8 views
18

Я пишу webapp используя CodeIgniter, который требует аутентификации. Я создал модель, которая обрабатывает всю мою аутентификацию. Однако я не могу найти способ получить доступ к этой модели аутентификации из другой модели. Есть ли способ получить доступ к модели из другого режима или более эффективный способ проверки подлинности внутри CodeIgniter?Можете ли вы получить доступ к модели из другой модели в CodeIgniter?

ответ

14

В общем, вы не хотите создавать объекты внутри объекта. Это плохая привычка, вместо этого, написать чистый API и ввести модель в вашу модель.

<?php 
// in your controller 
$model1 = new Model1(); 
$model2 = new Model2(); 
$model2->setWhatever($model1); 
?> 
+0

Это хорошая практика? Потому что пользователь Model2 должен знать, что он зависит от Model1. Какова хорошая практика? – Sabya 2009-01-20 15:25:35

+2

Да, лучше практиковать «вводить» зависимость, а также инициализировать Model2 внутри Model1. – Till 2009-01-21 19:57:52

+0

Это не звучит хорошо с суровой точки зрения. Что делать, если у меня есть функция, которая изменяет аспект одной модели и запускает действие для другой модели? – wag2639 2010-06-24 19:31:37

1

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

Я создал библиотеку Auth, которую я использую для управления аутентификацией и авторизацией. Вы можете получить доступ к такой библиотеке из своих контроллеров.

18

Кажется, вы можете загружать модели внутри моделей, хотя вы, вероятно, должны решить эту проблему другим способом. См. 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(); 
    } 
} 

Кроме того, я не понимаю, что говорит Тилл о том, что вы не должны создавать объекты внутри объектов. Конечно, вы должны! Отправка объектов в качестве аргументов мне кажется менее понятной.

1

Загрузка модели в модель теперь возможна с помощью нового CodeIgniter.

 Смежные вопросы

  • Нет связанных вопросов^_^