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的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5.2.3 接口类型提示

Symfony getUser 类型提示

纠正 PHPStan 在 Symfony 项目的 UserInterface 上抛出的类型提示错误

Symfony3 表单组件试图将 null 传递给 PHP 7 中的类型提示方法

使用 Symfony 2 CLI 工具,如何为子类生成具有正确类型提示的 getter 和 setter?

Symfony 5 VichUploaderBundler:类“App\Entity\xxx”中方法“setImageFile”中参数“imageFile”的类型提示无效