Heim >Backend-Entwicklung >PHP-Tutorial >YII中model层的一个小问题。。

YII中model层的一个小问题。。

WBOY
WBOYOriginal
2016-06-06 20:45:42991Durchsuche

下面是controller层的代码,用来保存表单数据:

<code>public function actionAdd(){
    $categoryModel = new Category();

    if(isset($_POST['Category'])){

        $categoryModel->attributes = $_POST['Category'];

        if($categoryModel->save()){
            $this->redirect(array('index'));
        }

    }
</code>

我查看了CActiveRecord中的save方法是这样写的:

<code>public function save($runValidation=true,$attributes=null)
{
    if(!$runValidation || $this->validate($attributes))
        return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);
    else
        return false;
}
</code>

是我的理解的话应该是将$attribute传进去,但实际上并没有传进去。而且假设不传进去,也因该有:

<code>if($attributes==null){
$attributes=$this->attributes;}
</code>

之类的啊!怎么连这个都没有?

回复内容:

下面是controller层的代码,用来保存表单数据:

<code>public function actionAdd(){
    $categoryModel = new Category();

    if(isset($_POST['Category'])){

        $categoryModel->attributes = $_POST['Category'];

        if($categoryModel->save()){
            $this->redirect(array('index'));
        }

    }
</code>

我查看了CActiveRecord中的save方法是这样写的:

<code>public function save($runValidation=true,$attributes=null)
{
    if(!$runValidation || $this->validate($attributes))
        return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);
    else
        return false;
}
</code>

是我的理解的话应该是将$attribute传进去,但实际上并没有传进去。而且假设不传进去,也因该有:

<code>if($attributes==null){
$attributes=$this->attributes;}
</code>

之类的啊!怎么连这个都没有?

谢邀。
题主有没有对 Category Model 使用 rule 规则,这涉及到了 Yii 中的 safe 机制,只有 Category 中的属性是 safe 时,才能通过 $categoryModel->attributes 接收到数据。请参考:

《Understanding "Safe" Validation Rules》

总结了一篇博文,题主可以看下: 《源码分析 Yii - save 机制》

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn