Почему воспламенитель кода не разделяет типы классов? - PullRequest
1 голос
/ 24 июня 2011

Когда вы используете воспламенитель кода, вы загружаете библиотеку или модель, например, так:

$this->load->library('mylibrary');  
$this->load->model('mymodel');

Итак, на примере реального мира, допустим, у вас есть контроллер с именем user.

Итак, чтобы войти в систему, вы отправляете его на http://example.com/user/login

Теперь функция login загружает форму, которая отправляет http://example.com/user/login_do Вы делаете несколько простых проверок, а затем отправляете их вашей модели для проверки базы данных.

Так вы звоните

$this->load->model('user');
if($this->user->validate($email, $pass)){...}

<час />

Э-Э-Э!

Неустранимая ошибка: невозможно переопределить класс Пользователь в /var/www/unity/src/application/models/User_Model.php на линии ...

Так что случилось? Ну, код воспламенителя не разделяет классы, поэтому ваша модель теперь конфликтует с вашим контроллером,

уверен, что вы можете использовать

$this->load->model('user_model', '', 'user_m');
if($this->user_m->validate($email, $pass)){...}

<ч />

Итак, на мой вопрос.

Почему воспламенитель кода не разделяет классы, например так что вы бы позвонили

$this->load->model('user');
if($this->model->user->validate($email, $pass)){...}

Конечно, это немного дольше, но, черт возьми, это сделает вещи приятнее для пользователя. Можно ли расширить код воспламенитель, чтобы он работал таким образом?

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Это не совсем то решение, о котором вы просите (или отличная идея), но ничто не мешает вам сделать это:

class Users extends CI_Controller {

    private $model;
    private $m;

    public function __construct()
    {
        parent::__construct();
        $this->load->model('user_model');
        $this->model->users = $this->user_model;
        $this->m = $this->user_model;
    }

    function index()
    {
        // Here's that syntax you wanted
        $this->model->users->get_many();

        // Even shorter
        $this->m->get_many();
    }

}

Вы действительно можете просто присвоить что-либо любому свойству контроллеравы хотите, если это не имя загруженного класса или свойства (сеанс, маршрутизатор и т. д.).Это может сэкономить вам время при наборе текста, если названия вашей модели действительно длинные, но в противном случае это бессмысленно и может привести к конфликту с вещами в будущем.

Вот что я делаю, если не использую *_model для названий моделей:

  • Имя контроллера: пользователи (во множественном числе)
  • Название модели: пользователь (в единственном числе)

Нет конфликта, короткий синтаксис, разумное именование, просто нетне работают для некоторых имен, таких как «новости».

Как я уже говорил, было бы неплохо видеть имена контроллеров, используя что-то вроде Controller_User или User_Controller, чтобы немного прояснить проблемы с пространством имен для классовчто нам на самом деле do приходится часто звонить, как модели и библиотеки, но сохранить наши URL-адреса как обычно.Я уверен, что это можно сделать, что-нибудь на черный день ...

1 голос
/ 24 июня 2011

Вы упустили главное: PHP не допускает двух классов с одинаковыми именами, в основном это то, что говорит Cannot redeclare class User.

...