Как я могу использовать подходящие объектно-ориентированные модели в CodeIgniter с конструкторами?
Способ создания моделей CodeIgniter на данный момент (т.е. никакой конструктор, который должен постоянно передавать идентификатор пользователя и ограничен одним объектом):
$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 таким образом. Есть ли у кого-нибудь решения, которые все еще могут использовать суперобъект в каждой модели?
Ответы
Ответ 1
Вы можете сделать это, как обычно:
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
}
Ответ 2
вы можете subclass
модель или просто добавить что-то в constructor
Я думаю, вам нужно настроить код, чтобы сделать это так, как вы хотите...