【问题标题】:Return error message to a database field: Yii2 and Swiftmailer向数据库字段返回错误消息:Yii2 和 Swiftmailer
【发布时间】:2016-12-05 10:08:56
【问题描述】:

我使用 Yii2 框架和 Swiftmailer 使用 PHP 进行编程。

我正在尝试找到一种方法来使用错误消息更新数据库字段。当用户尝试创建帐户时,他声明的电子邮件无效,应使用错误消息更新字段 FailMesg。 我尝试了两种不同的方法,但似乎都不起作用(数据库字段仍然为 NULL):

第一个(在 send() 方法中包含变量)

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

第二个(使用 Logger 插件)

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

我在这里遗漏了什么吗?任何建议都将受到高度赞赏。

【问题讨论】:

  • 从您提供的代码示例中,我看不到您调用user->save() 来实际将$user->FailMesg 的值保存到数据库中。我假设$userUser 模型的对象,并且FailMesg` 字段存在于对应的user 表中。
  • 您的假设是正确的。当然我包含了一个$user->save() 命令,只是忘记包含了,对不起,我将编辑最初的问题。 - @sm1979
  • 你能附上你的rules吗?验证可能会妨碍您的保存。
  • @topher 我假设您询问的是 FailMesg 字段:在数据库(SQL Server)中,它被定义为数据类型 nvarchar(MAX)。在 Yii2 模型中,它应用的唯一规则是:string.
  • @topher 由于您的评论,我还将 FailMesg 字段定义为 'safe' 但没有任何改变

标签: php yii2 swiftmailer


【解决方案1】:

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

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

您必须在保存之前将其更改为字符串,例如:

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

【讨论】:

  • 你完全正确,谢谢。但问题依然存在! @topher
  • 如果发生验证错误,转储$user->getErrors()的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多