来自$ _GET的Yii质量分配未按预期工作

时间:2014-02-28 15:54:22

标签: php yii mass-assignment

我正在尝试将我通过GET发送的2个变量的大量分配到另一个模型:: controller(从project :: actionCreate到client :: actionCreate)

在project :: actionCreate的_form视图中,我得到了以下内容:

<?php echo "&nbsp;".Chtml::link('+New client',array('client/create',array('Client' => array('redir'=>Yii::app()->controller->route,'redirId'=>$model->id))));?>

目标是使用属性“redir”和“redirId”创建数组“Client”。

在client :: actionCreate中我想做类似

的事情
if(isset($_GET['Client']))
{
    $model->attributes=$_GET['Client'];
}

现在我注意到我的$ _GET var将客户端置于子阵列0中,所以我用

尝试了这个
$_GET[0]['Client']

同样,但没有运气。但是,如果我手动分配这样的变量:

$model->redir = $_GET[0]['Client']['redir'];
$model->redirId = $_GET[0]['Client']['redirId'];

然后它有效。

知道怎么了?目标是允许某人在创建/更新项目记录时创建新客户端,方法是将它们发送到client :: actionCreate,但是如果它们是从我的“+新客户端”链接到它们,则将它们重定向回原始项目:: actionCreate “链接。

2 个答案:

答案 0 :(得分:2)

我认为client数组放在子数组0中,因为你在参数周围添加了一个数组。尝试删除数组,如下所示:

<?php 
    Chtml::link('+New client',array('client/create', 'Client' => array('redir'=>Yii::app()->controller->route,'redirId'=>$model->id)));
?>

我不知道您的模型是什么样的,但如果未分配字段,则可能不是safe。您可以通过将它们添加到模型的规则部分来使它们安全。或者您可以尝试以下操作,通过指定false参数,可以将值分配给不安全的属性。 (http://www.yiiframework.com/doc/api/1.1/CModel#setAttributes-detail

$model->setAttributes($_GET['Client'], false);

答案 1 :(得分:0)

我不确定是否可以创建您想要的链接。我前段时间曾问过类似的问题Yii link with [ as a parameter我永远无法得到我想要的链接。最后,我刚刚创建了旧时尚方式的链接,而不是使用CHTML。