привет всем!
народ… подскажите как правильно использовать Модели?
может разберем конкретный пример?
привет всем!
народ… подскажите как правильно использовать Модели?
может разберем конкретный пример?
Давайте пример, разберем Разве в гайде и примере по созданию блога мало информации?
хотелось бы разжевать поподробнее
связь между контроллером и представлением - прозрачна и понятна
а вот механизм использования модели - нет
могу ли я создать модель для конкретной страницы, чтобы она получала данные из базы на основании GET-параметров? и будет ли это правильным применением модели?
честно говоря не укладывается в голове конкретное применение без примера…
Модель предоставляет интерфейс для работы с некоторыми данными, которые где-то хранятся (в идеале даже не важно где и как). Модель ничего не знает о представлении и контроллере, она умеет только работать со своим источником данных, поэтому ни о каких GET/POST параметрах говорить не приходится. Нужно найти запись в таблице по названию товара? Делаем следующее в контроллере:
$model = Product::model()->findByName($_GET['name']);
Как видите, здесь даже не используются стандартные методы CActiveRecord (findByAttributes(), например), потому что привязывать контроллер к полям таблицы в базе данных не очень хорошо. Если мы решим поменять название одного поля, то менять придется и контроллеры, и представления, и виджеты, которые это поле используют напрямую. Конечно, в реальных условиях не всегда удастся обойтись без использования того же CDbCriteria вне модели, но нужно стремиться к лучшему Главное не делать из контроллера ТТУК.
Всё это относится не только в моделям, работающими с базами данных. Взять, например, форму обратной связи на сайте. Модель FeedbackForm extends CFormModel должна предоставить контроллеру метод send() отправки письма, чтобы код контроллера сводился к 3 основным операциям: присвоение атрибутов, отправка письма, рендер/редирект. Еще бывает и четвертая - проверка прав доступа
нарыл на просторах интернета вот такое вот описание принципа MVC
где мне более-менее понятна роль модели =
1. Пользователь вводит адрес, и браузер обращается к контроллеру.
2. Контроллер обращается к модели.
3. Модель обращается к базе данных
(к примеру, для получения необходимой для вывода информации)
4. Информация из базы попадает обратно в модель.
5. Из модели информация передается в контроллер.
6. Контроллер передает эту информацию в вид.
7. Вид выводится в браузер с помощью контроллера.
если вышеизложенное точно описывает работу модели, то давайте попробуем продолжить на простом примере
Описано все верно, но я бы подкорректировал пункт 3.
Теоретически, модель имеет право не только к БД обращаться, а к любым данным вообще.
Простых примеров хватает в документации, вот хоть тут:
http://www.yiiframework.com/tour/
Ну и как бы must read: http://www.yiiframework.com/doc/guide/
все-таки без реального примера = не обойтись
нужно взять из БД статью с id=1
в модели нужно формировать SQL-запрос? что-то типа =
class Test extends CModel
{
public $qwe;
public function rules()
{
$qwe = Yii::app()->db->createCommand()
->select('*')
->from('post')
->where('id=:id', array(':id'=>1))
->queryRow();
return $qwe;
}
}
а в контроллере экшн =
public function actionTest()
{
$model=new Test;
$this->render('test',array('model'=>$model));
}
Ужас! Читайте уже гайд!
Научный тык driven development же
Я также новичок в Yii. Думаю нужно создать вот такую модель:
class Article extends CActiveRecord
{
static public function model($className = __CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return "{{article}}";
}
}
А в файле контроллера написать:
public function actionTest()
{
$article = Article::model()->findByPk(1);
$this->render('test',array('article'=>$article));
}
Подскажите кто-нибудь, как вывести label не используя форму?
Т.е. аналог “echo $form->labelEx($model,‘field’)”
См. класс CHtml, методы activeLabel() и label():
echo CHtml::activeLabel($model, 'field');