Очередные вопросы новичка

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Очередные вопросы новичка

Сообщение louisvuitton »

Не так давно начал изучать ООП и Yii в частности
В теме буду задавать вопросы, если не трудно, жду ответов

Читаю одну книгу и наткнулся на вот что:

Есть сущность(модель) issue
Она может быть типа bug, feature, task - который хранится в базе как 0, 1 или 2

Когда надо в форме вывести вместо цифр названия типов в виде выпадающего списка, автор книги вводит в модель константы

Код: Выделить всё

const TYPE_BUG = 0;
const TYPE_FEATURE = 1;
const TYPE_TASK = 2;
И метод

Код: Выделить всё

public function getTypes() {
return array(self::TYPE_BUG => 'Bug', 
self::TYPE_FEATURE => 'Feature',
self::TYPE_TASK => 'Task')
}
Ну и в форме когда надо получить массив для выпадающего списка обращается к этому методу.

Вопрос 1: Какой смысл в этом оверкодинге? (книга на английском, не совсем понимаю) Почему нельзя например сделать просто метод
public function getTypes() {
return array('Bug', 'Feature', 'Task')
}


Дальше, установил модуль user, вроде все работает но как им пользоваться правильно не совсем понятно. Например, как получить экземпляр пользователя (со всеми полями профиля) из контроллеров вне этого модуля?!
Прошу пример и если можно объяснение, что при этом происходит (как разворачивается цепочка вызовов)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Очередные вопросы новичка

Сообщение zelenin »

Вопрос 1: Какой смысл в этом оверкодинге? (книга на английском, не совсем понимаю) Почему нельзя например сделать просто метод
public function getTypes() {
return array('Bug', 'Feature', 'Task')
}
так вам надо получить массив с ключами, вносимыми в БД, а вы получаете просто массив значений.
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Очередные вопросы новичка

Сообщение louisvuitton »

у простого(не ассоциативного) массива ключи - 0, 1, 2 ..... и select в форме как раз и отправит эти числа, которые можно внести в базу
Аватара пользователя
sluchainiyznak
Сообщения: 617
Зарегистрирован: 2013.05.19, 17:51
Откуда: ХМАО-Югра, г. Сургут
Контактная информация:

Re: Очередные вопросы новичка

Сообщение sluchainiyznak »

louisvuitton писал(а):у простого(не ассоциативного) массива ключи - 0, 1, 2 ..... и select в форме как раз и отправит эти числа, которые можно внести в базу
Ну вы ведь сами отвеачете на поставленный вами вопрос, то есть константы могут выспупать в виде как просто числовых, так и строковых ключей
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Очередные вопросы новичка

Сообщение maleks »

@louisvuitton, это для того чтобы вы везде в коде могли использовать Класс::TYPE_BUG и т.д., при всяких проверках и прочее, а не полагались на какие то магические числа. Типа 0 было задумано как баг, а не 0 ...
А функция getTypes() служит только для отображения названия, кстати в книге она не static ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Очередные вопросы новичка

Сообщение zelenin »

louisvuitton писал(а):у простого(не ассоциативного) массива ключи - 0, 1, 2 ..... и select в форме как раз и отправит эти числа, которые можно внести в базу
верно, но поменяв порядок в
return array('Bug', 'Feature', 'Task')
, вы поменяете соответствие индекса и значения.
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Очередные вопросы новичка

Сообщение louisvuitton »

@sluchainiyznak ну я понимаю, что константы могут, но зачем? если можно и без них

@zelenin на крайняк можно было сделать return array('0' => 'Bug', '1' => 'Fearure' ....); константы ведь все равно не обязательны на случай перестановок...

@maleks Вот у вас уже вижу какие-то плюсы. Возможно оно того и стоит. (в книге getTypes не static)

По поводу второго вопроса попробую уточнить...
В модуле User есть контроллер Profile
Полностью профиль пользователя в этом контроллере загружается вот таким методом:

Код: Выделить всё

    public function loadUser() {
//ProfileController.php
    if ($this->_model === null) {
        if (Yii::app()->user->id)
        $this->_model = Yii::app()->controller->module->user();
        if ($this->_model === null)
        $this->redirect(Yii::app()->controller->module->loginUrl);
    }
    return $this->_model;
    }
вопрос 2.1 Я правильно понимаю, что в этой строке $this->_model = Yii::app()->controller->module->user();
вызывается метод главного файла модуля (UserModule) и именно в этом методе происходит получение пользователя?

Код: Выделить всё

// UserModule.php
    public static function user($id=0,$clearCache=false) {
        if (!$id&&!Yii::app()->user->isGuest)
            $id = Yii::app()->user->id;
        if ($id) {
            if (!isset(self::$_users[$id])||$clearCache)
                self::$_users[$id] = User::model()->with(array('profile'))->findbyPk($id);
            return self::$_users[$id];
        } else return false;
    }
вопрос 2.2 Если да, то почему главный метод вызывается так, хотя он static ?

вопрос 2.3 Yii::app()->user Что находится здесь?
вопрос 2.4 Как мне получить профиль пользователя из другого контроллера, который не входит в модуль User (Ведь такое Yii::app()->controller->module->user(); уже не прокатит)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Очередные вопросы новичка

Сообщение zelenin »

louisvuitton писал(а):@zelenin на крайняк можно было сделать return array('0' => 'Bug', '1' => 'Fearure' ....); константы ведь все равно не обязательны на случай перестановок...
везде циферки будете менять? в одной функции? во второй, в третьей? для этого и сущестуют константы, чтобы поменять только в одном месте.
Ответить