【问题标题】:Change the name of a Symfony autowire alias更改 Symfony 自动装配别名的名称
【发布时间】:2021-09-22 15:18:08
【问题描述】:

我正在使用 Symfony 5.3 和 Symfony RateLimiter 包。

为此,一个方法应该被调用:

public function root(Request $request, RateLimiterFactory $authenticationApiLimiter)
{
}

RateLimiterFactory 要求将变量称为 $authenticationApiLimiter 才能正确自动装配。但是,该项目使用的是蛇形案例变量标准。

如何使用别名或更改它?

谢谢

【问题讨论】:

  • 为什么你认为这个变量应该完全像这样调用?重命名后会发生什么?
  • 它抱怨找不到$authentication_api_limiter autowired,并指出$authenticationApiLimiter IS autowired。
  • 您可以使用其他名称重新绑定参数。这里描述symfony.com/doc/current/…
  • docs 说:如果你使用服务自动装配,变量名必须是:“rate limiter name”(驼峰式)+“Limiter”后缀。在这里使用 camecase 并将其分配给蛇变量可能会更好。 PHP 正在逐渐转向具有无法更改的确切参数名称的地步。还是习惯就好了。
  • 火车箱?那么变量名中的破折号?你确定吗?

标签: php symfony autowired symfony-ratelimiter


【解决方案1】:

我喜欢 Symfony 的大部分设计,但是当涉及到自动命名事物时,它们往往会有点忘乎所以。最好的全职解决方案确实是遵循 Symfony 标准并接受它。但是,如果您真的愿意,可以使用 bind 来更改参数名称。

# config/services.yaml
services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
    
    # named alias    
    Symfony\Component\RateLimiter\RateLimiterFactory $anonymous_api: '@limiter.anonymous_api'

class DefaultController extends AbstractController
{
    #[Route('/', name: 'default')]
    public function index(RateLimiterFactory $anonymous_api): Response
    {
        return $this->render('default/index.html.twig', [
            'controller_name' => 'DefaultController',
        ]);
    }
}

您也可以只使用绑定来代替命名别名。我认为别名更具体一些,但它们都有效。

要找出服务 ID,首先创建一个新的 5.3 项目,安装 symfony/rate-limiter,然后将 rate_limiter.yaml 文件从文档复制到 config/packages。

bin/console debug:container RateLimiterFactory

 Select one of the following services to display its information:
  [0] Symfony\Component\RateLimiter\RateLimiterFactory $anonymousApiLimiter
  [1] Symfony\Component\RateLimiter\RateLimiterFactory $authenticatedApiLimiter
 > 0
Information for Service "limiter.anonymous_api"
===============================================

 ---------------- -------------------------------------------------- 
  Option           Value                                             
 ---------------- -------------------------------------------------- 
  Service ID       limiter.anonymous_api                             
  Class            Symfony\Component\RateLimiter\RateLimiterFactory  
  Tags             -         

limiter.anonymous_api 是关键。您可以使用命名别名中的服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多