Можете ли вы объяснить окончательные отношения между моделью и контроллером в yii? - PullRequest
0 голосов
/ 25 ноября 2011

Я новичок в модели MVC.Я погуглил, написал код, играл с большим количеством кода.Но все еще смущен окончательными отношениями между контроллером и моделью.До MVC мой стиль программирования был примерно таким:

class Users extend Database{
function __construct(){}
 public $id,$name;
 public function Save(){
   $this->Execute("[Built query using the two member variables]");
 }
}

И я использовал этот класс в своем HTML как

$user = new User();
$user->id= "u1";
$user->name = "sarah";
$user->Save();

Итак, как я могу связать свое старое понимание с yiiмодель - контроллер?

Моя точная путаница:

1) Когда я создавал модель для таблицы из команды, я не нашел никакого определения свойства в моделидля каждого столбца таблицы.Вместо этого в контроллере эта строка находится $model->attributes = $_POST['Message'] что, черт возьми, эта строка?

Isn't it better this way:
$model->message = "hi";
$model->date ="10-10-2011";
$model->save();

Ответы [ 3 ]

1 голос
/ 19 июня 2013

хорошо, чтобы понять одну строку

$model->attributes = $_POST['Message'];

мы должны посмотреть на класс модели. в классе модели (расширяет CActiveRecord, обычно автоматически генерируется gii) у нас есть две важные функции, attributeLabels и rules.

Атрибут attributeLabels перечисляет все свойства моделей (или переменные, или столбцы, которые мы хотим сохранить в базе данных, или просто атрибуты).

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

array('name', 'safe'),

Это правило указывает на то, что правило не применяется, и сохранение переменной в базе данных целесообразно.

Теперь, когда в контроллере (или где-либо еще), когда у нас есть $ _POST ['Message'] и мы применяем одну строку

$model->attributes = $_POST['Message'];

Все наши опубликованные значения применяются к $ model, то есть мы не должны проходить проверку и присваивание каждого атрибута / свойства, а только после одной строки

$model->save();

все сохраняется в базе данных после проверки. В этом прелесть использования Model (в данном случае CActiveRecord).

0 голосов
/ 25 ноября 2011
$user = new User();
$user->id= "u1";
$user->name = "sarah";
$user->Save();

Теперь этот код вы должны написать в действии контроллера, а это

<span><?php echo $user->name ?></span>

Ваш взгляд.

0 голосов
/ 25 ноября 2011

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

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