我是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();
答案 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