Преобразование массива ошибок PHP Yii Mailer в строку

Проблема заключается в выборе списка флажков, который является множественным выбором. Когда я удаляю следующий код почтовой программы из контроллера, форма отправляется по электронной почте... '{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;


}

Если взорваться перед Сохранить...

[quote="php manual"] Возвращает строку, содержащую строковое представление всех элементов массива в том же порядке, с связующей строкой между каждым элементом.[/quote]

А почтовик $message = strtr возвращает строку из массива...

[quote="phpmanual"]strtr - если задано два аргумента, второй должен быть массивом в форме массив('от' => 'до', ...). Возвращаемое значение представляет собой строку, в которой все вхождения ключей массива заменены соответствующими значениями...

$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));

В. Почему возникает ошибка? а также...

В. Каково решение для отправки $model->выборов по электронной почте?


person hushpuppy    schedule 15.07.2012    source источник


Ответы (1)


В. Почему возникает ошибка?

Отвечать:

Сначала strtr() ожидает, что массив будет иметь форму array('stringFROM'=>'stringTO'), а не array('stringFROM'=>array(...)).

Вы получаете второй формат (и, следовательно, ошибку), потому что $model->selection — это массив, так как вы сделали explode() в afterFind().

afterFind() вызывается всякий раз, когда вы загружаете модель с любым из find методов CActiveRecord (т.е. find(), findAll(), findByPk(), findByAttributes() и т. д.), и, если я прав, вы вызываете один из этих методов для получения текущей модели.


Q. Каково решение для отправки $model-›selections по электронной почте?

Отвечать:

В этом случае вы можете просто сделать implode() еще раз, чтобы получить строку:

'{serviceItem}' => implode(',',$model->selection);
person bool.dev    schedule 15.07.2012
comment
добро пожаловать, я рад, что смог помочь. рекомендуется прочитать часто задаваемые вопросы, а также эта метапост о принятии ответов. не торопимся, просто информируем вас о том, как работает сообщество. - person bool.dev; 16.07.2012
comment
ну теперь ты знаешь! по мере того, как вы набираете больше репутации, вы получаете больше привилегий, таких как голосование, комментирование где угодно и т. д. Кстати, добро пожаловать, надеюсь, у вас будет хороший опыт здесь. - person bool.dev; 17.07.2012