Как я могу использовать правильные объектно-ориентированные модели в CodeIgniter с конструкторами? - PullRequest
10 голосов
/ 13 декабря 2011

В настоящий момент я создаю модели CodeIgniter (т.е. без конструктора, которому приходится постоянно передавать userID и ограниченный одним объектом):

$this->load->model('User');
$this->user->set_password($userID, $password);

Но я бы хотел сделать это следующим образом:

$this->load->model('User');
$User = new User($userID);
$User->set_password($password);

ОБНОВЛЕНИЕ: Возможно, плохой пример была просто модель пользователя.

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

$this->load->model('List');
$this->load->model('Item');

$List = new List();
$items[] = new Item($itemName1, $itemPrice1);
$items[] = new Item($itemName2, $itemPrice2);

$List->add_items($items);

CodeIgniter чувствует себя в корне сломанным при обработке PHP OO таким образом.У кого-нибудь есть какие-либо решения, которые все еще могут использовать суперобъект в каждой модели?

Ответы [ 2 ]

13 голосов
/ 13 декабря 2011

Вы можете сделать это, как обычно:

require_once(APPPATH.'models/User.php');
$User = new User($userID);

Или вы можете положиться на модель уровня таблицы, чтобы получить модель уровня записи:

$this->load->model('users_model'); // users (plural) is the table-level model
$User = $this->users_model->get_user($userID);

Тем временем, в users_model

require_once(APPPATH.'models/User.php');

public function get_user($userID)
{
  // get a record from the db
  // map record to model
  // return model
}
0 голосов
/ 13 декабря 2011

вы можете subclass модель или просто добавить что-то в constructor Я думаю, вам нужно настроить код, чтобы сделать это так, как вы хотите ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...