Как мне структурировать свое приложение в CodeIgniter?

0

Я разрабатываю PHP-приложение с фреймворком кода, и я структурировал его в форме MVC, но я смущен в смысле того, как я должен создавать вещи. Моя текущая проблема заключается в том, что после того, как пользователь регистрируется в сеансе, сохраняется и получает доступ к контроллеру, модель ничего не знает о текущем сеансе, поэтому мне приходится передавать ему идентификатор пользователя каждый раз, когда я хочу использовать модель ( IE обновить или получить информацию о пользователе), это кажется неэффективным, чтобы постоянно делать это каждый раз. Мне интересно, есть ли лучший способ или я ошибся в том, как я организовал свой код.

Теги:
codeigniter

2 ответа

0
Лучший ответ

Например: у вас есть контроллер с кучей пользовательских методов. вы уже вошли в систему пользователя в отдельном контроллере, и вы используете сеанс cookie и базы данных

создать конструктор в контроллере

public function __construct() {

        parent::__construct();

        $this->load->model( 'users' );

        // return the $user object 
        if ( ! $this->user = $this->users->returnUserFromCookie() ) {
            redirect( '/login/', 'refresh' );       }

        // assign the id 
        else {  $this->userID = $this->user->id ; }


    } // 

если пользовательский объект не возвращается из пользовательской модели, мы перенаправляем его на логин.

в противном случае $this-> userID теперь доступен для любого метода в контроллере, любого метода, который вы вызываете в своих моделях, и любого из видов, которые вы вызываете.

    function showHistory(){

     $history = $this->users->returnHistory($this->userID) ; 

  } 

И в этом случае, поскольку мы также имеем объект пользователя $this->, мы можем вытаскивать из него другие данные любым способом.

function sayHello(){

$data['greeting'] = 'Hello ' . $this->user->first . ' ' . $this->user->last ; 

} 

нам не пришлось пропускать пользователя или пользователя $this-> в sayHello(), потому что он уже был доступен. и нам не нужно проверять, установлен ли пользователь $this->, потому что эта проверка была выполнена в конструкторе. если $this-> пользователь не установлен, контроллер никогда не используется.

вы можете назначить $this-> пользователю $ data. что делает его более чистым в ваших взглядах.

в методе контроллера назначить данные и передать $ data для просмотра

$data['user'] = $this->user ;
$this->load->view( 'history', $data ); 

теперь, на ваш взгляд, вам не нужен $this->, потому что у нас есть объект $ user.

<?php echo 'Hello ' . $user->first . ' ' . $user->last ; ?> 

========= Редактировать

Спасибо за ваш ответ. Как вы получаете доступ к $ user в модели?

то же самое, что и примеры контроллеров. $this-> user-> id и т.д.

Как и как модель знает, что пользователь должен делать с операцией базы данных, когда вы ее вызываете.

это будет пользователь, которого вы вызвали (или вернули) в конструкторе. поэтому, если вы вызвали $this-> пользователя, где id = 100, то это то, что будет доступно для моделей.

  • 0
    Спасибо за ваш ответ, Как вы получаете доступ к $ user в модели? Например, как модель узнает, с каким пользователем выполнять операцию базы данных, когда вы ее вызываете.
  • 0
    ответил выше в ответе
0

Вы также можете использовать помощники, которые вам помогут.

Как MVC Мы можем использовать вспомогательную функцию, которая может использовать любое место. Вы также можете создавать свои собственные помощники.

Загрузка вспомогательного файла довольно проста с использованием следующей функции:

$this->load->helper('name');

Где имя - это имя файла помощника, без расширения файла.php или "помощника".

Например, чтобы загрузить файл URL Helper, который называется url_helper.php, вы сделаете следующее:

$this->load->helper('url');

Для получения дополнительной информации вы можете перейти по ссылке Codeigniter

  • 0
    Спасибо за ваш ответ, не могли бы вы объяснить это дальше, я не уверен, что понимаю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню