1

問題は、複数選択であるチェックボックスリストの選択です。次のメーラーコードをコントローラーから削除すると、フォームがメールで送信されます...'{serviceItem}' => $model->selection,

モデルでは、次の分解と内破が選択をdbテーブルに正しく配置するために使用されます...

public function afterFind()
{

    $this->selection=explode(',',$this->selection);

        return true;

}

/*implode your selection */
public function beforeSave()
{
    $this->selection=implode(',',$this->selection);
        return true;


}

beforeSaveを内包する場合...

[quote = "php manual"]すべての配列要素の文字列表現を同じ順序で含み、各要素の間に接着文字列を含む文字列を返します。[/ quote]

そして、メーラー$message = strtrは配列から文字列を返します...

[quote = "phpmanual"] strtr-2つの引数が指定された場合、2番目は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-> selectionsを電子メールで送信するための解決策は何ですか?

4

1 に答える 1

1

Q.なぜエラーが発生するのですか?

答え:

まず、配列がの形式であり、ではないstrtr()ことを期待します。array('stringFROM'=>'stringTO')array('stringFROM'=>array(...))

でを実行したため、が配列であるため、2番目の形式(したがってエラー)が発生します。$model->selectionexplode()afterFind()

afterFind()findCActiveRecordのいずれかのメソッド(つまり、、、、など)find()findAll()使用findByPk()してモデルをロードするたびに呼び出されますfindByAttributes()。私が正しければ、これらのメソッドの1つを呼び出して、現在のモデルを取得します。


Q. $ model-> selectionsを電子メールで送信するための解決策は何ですか?

答え:

この場合implode()、文字列を取得するために、もう一度やり直すことができます。

'{serviceItem}' => implode(',',$model->selection);
于 2012-07-15T18:02:54.210 に答える