загрузить несколько моделей в массиве - codeigniter framework - PullRequest
3 голосов
/ 01 августа 2011
<?php
class Home extends CI_Controller
{
    public function __construct()
    {
        // load libraries //
        $this->load->library('session');
        $this->load->library('database');
        $this->load->library('captcha');

        // alternative
        $this->load->library(array('session', 'database', 'captcha'));

        // load models //
        $this->load->model('menu_model', 'mmodel');
        $this->load->model('user_model', 'umodel');
        $this->load->model('admin_model', 'amodel');

        // alternative
        $this->load->model(array(?));
    }
}
?>

Как загрузить все модели в массив?это возможно?

Ответы [ 4 ]

5 голосов
/ 01 августа 2011

Для моделей вы можете сделать это:

$models = array(
    'menu_model' => 'mmodel',
    'user_model' => 'umodel',
    'admin_model' => 'amodel',
);

foreach ($models as $file => $object_name)
{
    $this->load->model($file, $object_name);
}

Но, как уже упоминалось, вы можете создать файл application/core/MY_Loader.php и написать свой собственный метод загрузки моделей.Я думаю, что это может работать (не проверено):

class MY_Loader extends CI_Loader {

    function model($model, $name = '', $db_conn = FALSE)
    {
        if (is_array($model))
        {
            foreach ($model as $file => $object_name)
            {
                // Linear array was passed, be backwards compatible.
                // CI already allows loading models as arrays, but does
                // not accept the model name param, just the file name
                if ( ! is_string($file)) 
                {
                    $file = $object_name;
                    $object_name = NULL;
                }
                parent::model($file, $object_name);
            }
            return;
        }

        // Call the default method otherwise
        parent::model($model, $name, $db_conn);
    }
}

Использование с нашей переменной сверху:

$this->load->model($models);

Вы также можете разрешить передачу отдельного соединения с БД в массиве,но тогда вам понадобится многомерный массив, а не тот, который мы использовали.В любом случае, это не слишком часто вам нужно.

1 голос
/ 03 июля 2016

Я не имею никакого представления о CodeIgniter 2.x, но в CodeIgniter 3.x это также будет работать:

$models = array(
   'menu_model' => 'mmodel',
   'user_model' => 'umodel',
   'admin_model' => 'amodel',
);
$this->load->model($models);
0 голосов
/ 05 января 2019

Это прекрасно работает для меня:

$this->load->model(array('menu_model'=>'menu','user_model'=>'user','admin_model'=>'admin'));
0 голосов
/ 01 августа 2011

Не изначально, но вы можете легко расширить Loader->model() для поддержки этой логики.

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