Yii Mailer PHP错误数组到字符串转换

时间:2012-07-15 12:21:43

标签: php arrays yii string-conversion

问题是复选框列表选择是多选。当我从控制器中删除以下邮件代码时,表单将通过电子邮件发送... '{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->选项有什么解决方案?

1 个答案:

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