Вызов в стиле CodeIgniter $ this-> modelname-> function () вызывает - PullRequest
0 голосов
/ 28 марта 2011

Я пытаюсь получить доступ к моделям в стиле CodeIgniter, вызывая $this->model_name->function() в моих контроллерах. вот что я сделал до сих пор:

$this->load = new Load();

    foreach (glob("application/models/*.php") as $file) {
        $model = basename($file, ".php");
        $this->$model = new $model;
    }

Я знаю, что не могу сделать то, что пытался там, но, надеюсь, ты видишь мою цель. Что я хочу сделать, это заставить PHP писать $this->modelname = new modelname; для каждого файла в папке модели. Я собираю все файлы PHP и удаляю каталог и .php, оставляя только имя файла.

Прошу прощения, если это трудно понять, трудно объяснить>. <</p>

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Почему бы не создать автозагрузчик?

spl_autoload_register('customAutoloader');

function customAutoloader($class_name){
    $file_name = $class_name . ".php";
    //Model
    if(substr($class_name, -5) === "Model"){
        if(is_readable(PATH_MODELS . $file_name)){
            require_once(PATH_MODELS . $file_name);
        }
    }
}

В этой ситуации все классы моделей должны называться ModelnameModel, а файлы должны называться одинаково - ModelnameModel.php и располагаться в PATH_MODELS.

1 голос
/ 28 марта 2011

Это на самом деле должно работать, вам просто нужно включить файл:

foreach (glob("application/models/*.php") as $file) {
    @include_once $file;
    $model = basename($file, ".php");
    if (class_exists($model)) {
        $this->$model = new $model;
    } else {
        //handle error, trow an exception?
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...