Php Symfony2-如何插入可选参数
假设我有一个论坛服务。此服务需要论坛API的URL。我想要的是这个URL要么是内部的,要么是外部的 如果内部,则它将是一条路由,在routing.yml中配置,并由路由器服务返回 如果外部,它将是一个参数,在parameters.yml中配置 我想到的方法是: 在parameters.yml中查找变量forum_url。如果它不存在,请尝试获取该路径。否则,抛出异常 此实现的问题是,如果未定义变量,它会引发异常,因此我需要将其定义为可选参数(就像您可以使用服务(“@?service”) 更酷的是能够定义如下内容:Php Symfony2-如何插入可选参数,php,symfony,Php,Symfony,假设我有一个论坛服务。此服务需要论坛API的URL。我想要的是这个URL要么是内部的,要么是外部的 如果内部,则它将是一条路由,在routing.yml中配置,并由路由器服务返回 如果外部,它将是一个参数,在parameters.yml中配置 我想到的方法是: 在parameters.yml中查找变量forum_url。如果它不存在,请尝试获取该路径。否则,抛出异常 此实现的问题是,如果未定义变量,它会引发异常,因此我需要将其定义为可选参数(就像您可以使用服务(“@?service”) 更酷的是
"%forum_url% ? %forum_url% : @router"
有没有关于如何实现这些目标的想法
附言:如果还有其他“更好的实践”方法,我愿意听取意见。你可以用几种方法来做
%forum\u url%
不是一个可选但必须的参数,但当您想要内部url时,只需设置null
值(~
在yml中)到%forum\u url%
参数。然后,将%forum\u url%
和@router
都注入到您的服务中,并检查%forum\u url%
:如果它不是空的,则使用它,如果它是空的,则使用路由url\u解析器
。您将此新服务注入您的ForumService
。在url\u解析器
服务中,您执行第1点中所述的操作,因此您需要强制注入%forum\u url%
和@router
。这是一种更为可靠的方法选择1%forum\u url%
。但是,请注意,将整个容器注入服务被认为是一种不好的做法你可以用几种方法来做
%forum\u url%
不是一个可选但必须的参数,但当您想要内部url时,只需设置null
值(~
在yml中)到%forum\u url%
参数。然后,将%forum\u url%
和@router
都注入到您的服务中,并检查%forum\u url%
:如果它不是空的,则使用它,如果它是空的,则使用路由url\u解析器
。您将此新服务注入您的ForumService
。在url\u解析器
服务中,您执行第1点中所述的操作,因此您需要强制注入%forum\u url%
和@router
。这是一种更为可靠的方法选择1%forum\u url%
。但是,请注意,将整个容器注入服务被认为是一种不好的做法如果您的symfony版本支持表达式语言,则可以通过以下方式执行: “@=container.hasParameter('forum_url')?parameter('forum_url'):服务('router')”
如果您的symfony版本支持表达式语言,则可以通过以下方式执行: “@=container.hasParameter('forum_url')?parameter('forum_url'):服务('router')”
(对解决方案1的回应)是的,这是mi当前的实现。我注入了两者,并检查forum_url==null。但我希望得到更好的东西?不过感谢您的输入。这意味着我当前的解决方案没有那么糟糕,是吗?检查我的编辑和第2点。这是解决方案的更干净的方式,我想它已经足够干净了(单一责任到位)(响应解决方案3)我知道3是一种糟糕的做法。如果我尝试注射整个容器,我的大脑会发痒,这似乎是件好事。xD(响应解决方案2)我喜欢这种方法。我真的很喜欢它。它更干净,尽管它不能解决在parameters.yml上强制设置参数的需要。但是我想它也没那么糟糕。这样,用户就知道如果他决定到外部去,应该把它放在哪里。非常感谢你的全面回答:)(回应解决方案1)是的,这是mi当前的实现。我将两者都注入,并检查forum_url==null。但我希望有更好的东西。不过,感谢您的输入。这意味着我当前的解决方案没有那么糟糕,是吗?检查我的编辑和第2点。这是解决方案的更干净的方式,我想它足够干净了(单一责任到位)(对解决方案3的反应)我知道3是一种糟糕的做法。如果我尝试注射整个容器,我的大脑会发痒,这似乎是件好事。xD(对解决方案2的反应)我喜欢这种方法。我真的很喜欢。它更干净,尽管它不能解决在parameters.yml上强制设置该参数的需要。不过,我想它也没那么糟糕。这样,如果用户决定到外部去,他就知道“放在哪里”。非常感谢你的全面回答:)
"%forum_url% ? %forum_url% : @router"