我正在使用 login_link ( docs ) 来验证忘记密码的用户。
按照文档,我自定义了电子邮件并覆盖了 htmlTemplate 但在现实生活中 phpStan 阻止我说:
Call to an undefined method Symfony\Component\Mime\RawMessage::htmlTemplate().
我正在尝试修复它,但我被卡住了 :(
知道吗?
1 回答
1
EmailMessage::getMessage()is的返回类型提示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. 请注意,根据 phpstan 文档,不鼓励使用此方法。(感谢@Ondřej Mirtes指出这一点)/** @var NotificationMail $email */ $email = $emailMessage->getMessage();
于 2021-08-26T08:21:08.530 回答