从服务获取Symfony基本URL?

lau*_*ent 4 service dependency-injection base-url symfony

我有一个需要访问当前应用程序基URL的服务(app.request.getBaseURL()在Twig视图中返回的内容).目前,我的配置是这样的:

services:
    WidgetModel:
        class: AppBundle\Model\WidgetModel
        scope: prototype
        arguments: ['%widgets%']
Run Code Online (Sandbox Code Playgroud)

所以作为第二个参数,我想注入基本URL.可能吗?如果没有,什么是适当的解决方案?

Cer*_*rad 5

据我所知,没有内置的基本URL服务.这实际上是一个红旗,可能有你的组件取决于它可能不是一个好主意.但我想不出一个很好的理由.

通常,人们会注入请求对象.但这有其自身的问题,如下所示:http://symfony.com/blog/new-in-symfony-2-4-the-request-stack

相反,注入@request_stack服务并从中提取url:

class WidgetModel
{
  public __construct($widgets,$requestStack)
  {
    $this->baseUrl = $requestStack->getCurrentRequest()->getBaseUrl();
Run Code Online (Sandbox Code Playgroud)

如果您确实发现自己需要多个服务中的baseUrl,那么您可以定义自己的工厂类型服务来生成它.但同样,这可能意味着您的设计需要重新思考.