问题是复选框列表选择是多选。当我从控制器中删除以下邮件代码时,表单将通过电子邮件发送... '{serviceItem}' => $model->selection,
在模型中,使用以下explode和implode将选择正确地放入db表中...
public function afterFind()
{
$this->selection=explode(',',$this->selection);
return true;
}
/*implode your selection */
public function beforeSave()
{
$this->selection=implode(',',$this->selection);
return true;
}
如果发生内爆之前...
[quote =“php manual”]返回包含字符串的字符串 以相同的顺序表示所有数组元素 每个元素之间的胶水串。[/ quote]
邮件程序$message = strtr
从数组中返回一个字符串......
[quote =“phpmanual”] strtr - 如果给出两个参数,第二个应该是一个数组 form array('from'=>'to',...)。返回值是所有出现的字符串 数组键已被相应的值替换......
$message = strtr ('Submitted on: {submissionDate}
Name: {firstName} {lastName}
Service Item: {serviceItem}
Visitor Comments: {message}', array(
'{submissionDate}' => $model->date,
'{firstName}' => $model->firstName,
'{lastName}' => $model->lastName,
'{serviceItem}' => $model->selection,
'{message}' => $model->comments));
Q值。为什么会出错?和...
Q值。 要在电子邮件中发送的$ model->选项有什么解决方案?
答案 0 :(得分:1)
Q值。为什么会出错?
首先strtr()
期望数组的格式为array('stringFROM'=>'stringTO')
,而不是array('stringFROM'=>array(...))
。
您将获得第二种格式(,因此错误),因为$model->selection
是一个数组,因为您在explode()
中完成了afterFind()
。< / p>
每当您使用CActiveRecord的find
方法加载模型时,都会调用
afterFind()
(即find()
,findAll()
,findByPk()
,{{1如果我是正确的,你正在调用其中一种方法来获得当前的模型。
Q值。在电子邮件中发送$ model-&gt;选项的解决方案是什么?
在这种情况下,您只需再次执行findByAttributes()
即可获得字符串:
implode()