2016-09-28 3 views
0

Я работаю над проектом Codeigniter, и я видел доступ к контроллеру из модели. Мне интересно, является ли контроллер $ this-> таким же или иным, как с использованием $ CI = & get_instance(). Я предполагаю, что нет, но я больше знаком с стандартным возвратом данных из функции, чем этим. Я не видел примеры CodeIgniter делают это, так что я не думаю, что это предложил способ доступа к контроллеру, но больше хака:Codeigniter - данные контроллера доступа от модели

class my_model extends CI_Model 
{ 
    public function __construct() 
    { 
     $this->errors = array(); 
     parent::__construct(); 
     $this->controller = get_instance(); 
    } 

    public function somefunc() 
    { 
     // Accessing controller 
     $this->controller->session->set_userdata('foo', 'bar'); 
     $this->controller->data = "fubar"; 
    } 
} 
+4

Я думаю, что это анти-шаблон. Контроллер должен быть управляющим логикой. Вы можете сделать это, получив возврат от функции модели. – Phiter

+0

Да согласен с @phiter. Но все же вы хотите получить доступ, затем попробуйте $ this-> controller = & get_instance(); Найти подробный ответ здесь: http://stackoverflow.com/a/4740548/1578380 – Chintan7027

ответ

2

Это не CI действительно, это изменение. Это может быть simple_HMVC, который используется.

При обычном использовании CI модель вернет данные.

Где-то в вашем приложении контроллер $ устанавливается как объект-контроллер и как псевдоним в супер-объекте CI. Таким образом реализуется иерархический модульный MVC, поэтому методы контроллера внутри модулей можно вызывать из других модулей.

Кажется, что это хорошая практика или нет, это вопрос некоторых дебатов. Это немного взломать, но для simple_hmvc это не плохой ИМХО обязательно, но я бы этого не сделал. Мне кажется, что вы создаете ситуации, когда отладка, модульное тестирование или даже простое ясность ответственности сильно размыты и вызовут проблемы позже.

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