你能解释一下yii中模型和控制器之间的最终关系吗?

时间:2011-11-25 15:02:51

标签: php yii

我是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 个答案:

答案 0 :(得分:1)

很好理解单行

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

我们必须研究模型类。在模型类中(扩展CActiveRecord,通常由gii自动生成)我们有两个重要的函数,attributeLabels和rules。

attributeLabels列出了所有模型属性(或变量,或者我们想要存储在数据库中的列,或者只是属性)。

在规则函数中,我们为每个变量/列/属性设置了所有规则。 在自动生成的表单中,这些规则直接反映了我们的数据库结构,在某些情况下我们没有规则所以只写了一行

array('name', 'safe'),

此规则表示不应用任何规则,并且将变量保存在数据库中是安全的。

现在当我们在控制器(或任何地方)有$ _POST ['消息']时,我们应用单行

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

我们发布的所有值都应用于$ model,即我们不会遍历每个属性/属性的验证和分配,只需单行

$model->save();

验证后,所有内容都会保存到数据库中。这就是使用Model(在这种情况下是CActiveRecord)的美妙之处。

答案 1 :(得分:0)

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

现在你应该用控制器动作编写代码,这个

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

您的观点。

答案 2 :(得分:-1)

这就是Active Record的用途,你所拥有的是模型的逻辑,没有逻辑你应该放入控制器,阅读active record pattern