2016-12-05 33 views
3

我使用Yii2框架和Swiftmailer在PHP中编程。将错误消息返回到数据库字段:Yii2和Swiftmailer

我想找到一种方法来更新数据库字段与错误消息。当用户尝试创建帐户并且他声明的电子邮件不是有效的电子邮件地址FailMesg应更新错误消息。 我已经尝试了两种不同的方式做,但没有一个似乎工作(数据库字段保持为空):

1日(以发送包含变量()方法)

$message = Swift_Message::newInstance() 
    ->……….. 
$transport = ……………… 
$mailer = Swift_Mailer::newInstance($transport); 
if($mailer->send($message, $failures)){ 
    …….. 
else 
    …….. 
    $user->FailMesg = $failures; 
........ 
$user->save(); 

2日(使用该记录器插件)

$message = Swift_Message::newInstance() 
    ->……….. 
$transport = ……………… 
$mailer = Swift_Mailer::newInstance($transport); 
$logger = new \Swift_Plugins_Loggers_ArrayLogger(); 
$mailer->registerPlugin(new \Swift_Plugins_LoggerPlugin($logger)); 
if($mailer->send($message)){ 
    …….. 
else 
    …….. 
    $user->FailMesg = $logger->dump(); 
........ 
$user->save(); 

我失去了一些东西在这里?任何建议将不胜感激。

+0

从你提供的代码示例中,我看不到你调用'用户>保存()'实际上节省'$的价值用户 - > FailMesg'到数据库中。我假设'$ user'是'User'模型的一个对象,FailMesg'字段存在于相应的'user'表中。 – sm1979

+0

你假设正确。当然,我包含'$ user-> save()'命令,只是忘了包含,对不起,我会编辑最初的问题。 - @ sm1979 – YorKal

+0

你可以包括你的“规则”吗?验证可能会影响您的保存。 – topher

回答

1

$failures是一个数组,而不是一个字符串。从swiftmailer docs

如果变量名称不存在,它会被初始化为空数组,然后故障将被添加到该数组。如果变量已经存在,它将被类型转换为一个数组,失败将被添加到它。

你必须保存如之前将其改变成一个字符串:

$user->FailMesg = implode("|", $failures); 
+0

您对此完全正确,谢谢。但问题仍然存在! @topher – YorKal

+0

如果发生验证错误,请转储'$ user-> getErrors()' – topher