如何通过phpStan与customLoginLinkNotification?



我使用login_link (docs)对忘记密码的用户进行身份验证。
按照文档,我定制了电子邮件,我覆盖了htmlTemplate,但在现实生活中phpStan阻止我说:
Call to an undefined method SymfonyComponentMimeRawMessage::htmlTemplate().
我试图修复它,但我卡住了:(
有什么主意吗?

对于EmailMessage::getMessage()的返回类型提示是RawMessage,实际上没有htmlTemplate()方法。

然而,在这个特殊的情况下,你实际上得到了一个NotificationMail(见这里的相关代码),它最终继承自RawMessage,但实现了htmlTemplate()方法(或者,更准确地说,它继承自TemplatedEmail,实现了上述方法)。

有几种方法可以解决phpstan的这个问题:
  • 检查$email是否为NotificationMail的实例

    $email = $emailMessage->getMessage();
    if ($email instanceof NotificationMail) {
    $email->htmlTemplate(...);
    }
    
  • 添加一个断言,如果$email不是NotificationMail,将在运行时抛出异常

    $email = $emailMessage->getMessage();
    assert($email instanceof NotificationMail);
    $email->htmlTemplate(...);
    
  • 添加内联@var。请注意,根据php文档,不建议使用这种方法。(感谢@Ondřej Mirtes指出这一点)

    /** @var NotificationMail $email */
    $email = $emailMessage->getMessage();
    

相关内容

  • 没有找到相关文章

最新更新