Symfony:控制器类型提示 UserInterface
Posted
技术标签:
【中文标题】Symfony:控制器类型提示 UserInterface【英文标题】:Symfony: Controller type hinting UserInterface 【发布时间】:2018-07-27 19:13:33 【问题描述】:我真的很喜欢在 Controller 方法中插入当前用户作为参数的功能。但是,我不确定一件事。如果我将当前用户插入到这样的控制器操作中:
public function myAction(UserInterface $currUsr)
$id = $currUsr->getId();
$email = $currUsr->getEmail();
我不知道$currUsr
对象实际上有getId()
和getEmail()
方法,因为Symfony\Component\Security\Core\User\UserInterface
没有定义这些方法。
那么类型提示的意义何在..?
【问题讨论】:
类型提示的要点是 SF 注入用户而无需您检索它。 Stof 在此处的评论 #6 中提到了您不能使用核心UserInterface
的子类的原因:symfony.com/blog/…
谢谢。该链接包含一些有用的信息。我猜 docblock 可以为 phpStorm 自动补全提供解决方案,我想我不能指望 PHP 具有类似 Java 的类型严格性。
当然可以:if (!($user instanceof SiteUserInterface)) throw new Exception(...)
【参考方案1】:
如果您需要更具体的类,其中包含 UserInterface
缺少的那些方法,您应该使用它
public function myAction(UserWithMethods $currUsr)
$id = $currUsr->getId();
$email = $currUsr->getEmail();
那么就不需要添加docblock了。
【讨论】:
以上是关于Symfony:控制器类型提示 UserInterface的主要内容,如果未能解决你的问题,请参考以下文章
纠正 PHPStan 在 Symfony 项目的 UserInterface 上抛出的类型提示错误
Symfony3 表单组件试图将 null 传递给 PHP 7 中的类型提示方法
使用 Symfony 2 CLI 工具,如何为子类生成具有正确类型提示的 getter 和 setter?
Symfony 5 VichUploaderBundler:类“App\Entity\xxx”中方法“setImageFile”中参数“imageFile”的类型提示无效