1

我正在使用 login_link ( docs ) 来验证忘记密码的用户。
按照文档,我自定义了电子邮件并覆盖了 htmlTemplate 但在现实生活中 phpStan 阻止我说:
Call to an undefined method Symfony\Component\Mime\RawMessage::htmlTemplate().
我正在尝试修复它,但我被卡住了 :(
知道吗?

4

1 回答 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 回答