Я использую следующий код для инициализации модели из моего контроллера:
$this->load->model('model_name');
Можно ли каким-либо образом изменить приведенную выше строку так, чтобы конструктор модели получил параметр? Я хочу использовать следующий код в конструкторе модели:
function __construct($param_var) { parent::Model(); $this->$param_var = $param_var; //I'm not even sure this works in PHP..but different issue }
Это было бы очень полезно, чтобы я мог повторно использовать классы модели. Благодарю.
ОБНОВЛЕНИЕ: (из одного из ответов мой исходный вопрос решен .. спасибо!) Просто чтобы объяснить, почему я хотел это сделать: идея состоит в том, чтобы иметь возможность повторно использовать класс модели. Поэтому в основном, чтобы дать простой пример, я хотел бы иметь возможность передать переменную «order_by» в класс модели, чтобы я мог повторно использовать логику в классе модели (и динамически изменять значение порядка в sql), не имея для создания отдельного класса или отдельной функции.
Это плохой дизайн? Если бы вы могли бы объяснить, почему бы вам не сделать что-то подобное и как вы это сделаете?
Я вижу ваши аргументы в пользу этого, но могу ли я предложить посмотреть объектно-реляционное сопоставление для ваших потребностей в базе данных. Существует пользовательская библиотека ORM для CodeIgniter, называемая DataMapper, которую я использовал в последнее время. Вы можете использовать таблицы в своих контроллерах как объекты, и это может быть лучше подходит для вашей проблемы.
Вы не можете передавать параметры через функцию load
. Вам нужно будет сделать что-то вроде:
$this->load->model('model_name'); $this->model_name->my_constructor('stuff');
В модели:
function my_constructor($param_var) { ... }
Ответ на обновление:
Вы можете просто передать значение order_by, когда вы вызываете свою модельную функцию. Я предполагаю, что в вашем контроллере есть что-то вроде $this->model_name->get($my_id);
Просто добавьте параметр order_by к этой функции. IMO делает вашу модельную логику более гибкой / многоразовой, потому что, как вы ее делали, я полагаю, что установка order_by в конструкторе будет устанавливать значение order_by для каждой функции.
Вместо использования DataMapper я предложил использовать IgnitedRecord, потому что DataMapper больше не поддерживается больше, чем он был заменен на Ruby