Model, когда использовать?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Model, когда использовать?

Сообщение destin9000 »

Собственно что делает данный метод, возвращает обьект модели(что то вроди Singleton)?
Когда использовать его, а когда создавать новый обьект(new)?
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Model, когда использовать?

Сообщение flashimage »

Если вы хоть раз загляните в свои модели, то увидите там код, сгенерированный gii

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

 /* Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Document the static model class
     */
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    } 
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

flashimage писал(а):Если вы хоть раз загляните в свои модели, то увидите там код, сгенерированный gii

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

 /* Returns the static model of the specified AR class.
     * @param string $className active record class name.
     * @return Document the static model class
     */
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }
Так вот когда использовать ::model, а когда создавать новый обьект?
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Model, когда использовать?

Сообщение lancecoder »

когда надо создавать новый объект - надо создавать новый объект
когда надо использовать существующую модель - надо использовать ::model
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

lancecoder писал(а):когда надо создавать новый объект - надо создавать новый объект
когда надо использовать существующую модель - надо использовать ::model
Зачем?Если виду можно передать обьект модели.

После CI писать в Yii очень необычно, вот еще какие вопросы:
1)Чем отличается preload от import в конфигах?
2)Насколько я понял,для того что бы подгрузить класс, надо создать метод с названием его типа, например 'filters'.Где можно почитать про те самые типы?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Model, когда использовать?

Сообщение anton44eg »

preload вызывает метод init() при инициализации приложения, иначе этот метод будет вызван лениво (при первом обращении к компоненту)
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

Спасибо, еще вопросики:
1)Yii::app()->request->baseUrl пуст(index.php находится в корневой папке), данное свойство можно вообще не использовать, либо при загрузке на реальный сервер могут возникнуть проблемы?
2)Я создал приложение через yiic, удалил все контроллеры,виды,модели, все поменял на свое, и сразу при загрузке сайта вылетает:

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

Невозможно обработать запрос "site/error" 
-Естественно контроллера site и экшна error у меня нет, как это можно переопределить?
-Контроллер index есть, и экшн index тоже, но yii выдает CHttpException, как поменять defaultController и defaultAction?
-Как создавать совершенно пустое приложение, чтобы дальше такого не было?
3)В основном layout-е есть блок, где должно отображаться 5 последних новостей, правильнее создать модель для этой таблицы и метод для получения, и вызывать через News::model()->getNews() или как то иначе?

Заранее спасибо.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Model, когда использовать?

Сообщение rak »

1. если проект будет в папке(типа http://example.com/folder), то без использования этого параметра будут проблемы
2. в конфиге нужно прописать errorAction для компонента errorHandler
3. создать модель и сделать виджет LastNews, в котором уже и выводить эти новости
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

rak писал(а):1. если проект будет в папке(типа http://example.com/folder), то без использования этого параметра будут проблемы
2. в конфиге нужно прописать errorAction для компонента errorHandler
3. создать модель и сделать виджет LastNews, в котором уже и выводить эти новости
Аж виждет для одного метода?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Model, когда использовать?

Сообщение anton44eg »

я тоже обычно выношу такие вещи в виджеты
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Model, когда использовать?

Сообщение rak »

destin9000 писал(а): Аж виждет для одного метода?
зато код читабельнее
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

Ок, виджет сделаю..
Тогда другой вопрос, справа есть юзерпанель, если юзер залогинен то отображается она, если нет - то форма авторизации.
Это как сделать?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Model, когда использовать?

Сообщение rak »

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

<?php if(Yii::app()->user->isGuest): ?>
...
<?php else: ?>
...
<?php endif; ?>
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

rak писал(а):

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

<?php if(Yii::app()->user->isGuest): ?>
...
<?php else: ?>
...
<?php endif; ?>
Это понятно, я думал тоже через виджет, спасибо.

Написал виджет:

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

class NewsWidget extends CWidget
{
    public function run()
    {
        $news = News::model()->getLastNews();
         
        $this->render('news',array('news'=>$news));
    }
}
 
В виде соответственно вывожу все, в цикле.
Что еще можно добавить/поправить?

Как кстати правильно виджеты называть?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Model, когда использовать?

Сообщение rak »

как и остальные классы, главное чтоб понятно было, что это такое и что делает :)
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

rak писал(а):как и остальные классы, главное чтоб понятно было, что это такое и что делает :)
Всмысле название файла и класса)

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

CHttpException

Невозможно обработать запрос "site/error". (D:\WebServer\domains\somedomain\framework\web\CWebApplication.php:286)

#0 D:\WebServer\domains\somedomain\framework\base\CErrorHandler.php(331): CWebApplication->runController('site/error')
#1 D:\WebServer\domains\somedomain\framework\base\CErrorHandler.php(204): CErrorHandler->render('error', Array)
#2 D:\WebServer\domains\somedomain\framework\base\CErrorHandler.php(129): CErrorHandler->handleException(Object(CHttpException))
#3 D:\WebServer\domains\somedomain\framework\base\CApplication.php(720): CErrorHandler->handle(Object(CExceptionEvent))
#4 [internal function]: CApplication->handleException(Object(CHttpException))
#5 {main}
Какие то траблы..В конфигах компонента указал

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

'errorHandler'=>array(
            'errorAction'=>'error/error'
),
И еще такой вопрос:
Для виджета мне надо функцию, которая будет обрезать текст до определенного количества символов, если длина меньше=>не обрезать.
Где ее написать, в самом виджете?
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

И последний вопрос:
Зачем нужны классы CDataProvider и CActiveDataProvider?Где можно про них почитать(на русском)?
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Model, когда использовать?

Сообщение anton44eg »

CDataProvider (и его потомки) используются в гридах (CGridView) и прочих "продвинутых" виджетах
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Model, когда использовать?

Сообщение flashimage »

Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
destin9000
Сообщения: 225
Зарегистрирован: 2013.03.10, 12:47

Re: Model, когда использовать?

Сообщение destin9000 »

Спасибо, я читал, но так и не понял для чего он..
Чем он отличается от CActiveRecord?

Прочитал про RBAC, понравилось:

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

$bizRule='return Yii::app()->user->name === "admin";';
$auth->createRole('admin', 'администратор', $bizRule);
 
$bizRule='return Yii::app()->user->isGuest;';
$auth->createRole('guest', 'гость', $bizRule);
 
Только вот куда данный код пихать - не понял.Или yii автоматически читает все файлы из папки config и надо просто создать там файл?
Последний раз редактировалось destin9000 2013.03.12, 13:58, всего редактировалось 1 раз.
Ответить