У меня есть простая структура MVC, которую я использую, где я использую следующий вызов для загрузки модели в каждую функцию в контроллере:
$member_model = $this->loadModel('Members');
То, что я хотел бы сделать, это вызвать это один раз, чтобы каждая функция в Member Controller могла использовать его, а не вызывать его в каждой функции.
Что-то вроде:
class Members extends Controller
{
private $member_model = $this->loadModel('Members');
function myFunction(){
myvar = $member_model->someFunction();
}
}
Замечания: loadModel — это метод класса Controller, который расширяет контроллер Members.
Я получаю различные ошибки в зависимости от того, является ли переменная приватной / публичной или нет, однако она работает внутри функции.
Можно ли вообще сделать это на уровне класса, если да, то как?
Обновление 1
Контроллер участников
class Members extends Controller
{
private $member_model = null;function __construct()
{
parent::__construct();
$this->member_model = $this->loadModel('Members');
}
}
Класс контроллера
class Controller
{
function __construct()
{
Session::init();
try {
$this->db = new Database();
} catch (PDOException $e) {
die('Database connection could not be established.');
}
$this->view = new View();
}
public function loadModel($name)
{
$path = MODELS_PATH . strtolower($name) . '_model.php';
if (file_exists($path)) {
require MODELS_PATH . strtolower($name) . '_model.php';
$modelName = $name . 'Model';
return new $modelName($this->db);
}
}
}
вы можете использовать его в конструкторе
class Members extends Controller
{
private $member_model = null;
public function __constructor() {
parent::_constructor();
$this->member_model = $this->loadModel('Members');
}
function myFunction(){
$myvar = $member_model->someFunction();
}
}
Других решений пока нет …