如何在注释中使用 Symfony 容器参数?
How to use Symfony container parameters in annotations?
通常可以在 Symfony 5.3+ 的 method/class 注释中使用容器参数吗?
例如,我的一个操作方法使用 @ParamConverter
注释,使用 FOSRest RequestBodyParamConverter
:
class SomeController extends AbstractController {
/**
* @ParamConverter("post", converter="fos_rest.request_body")
*/
public function sync(Request $request, Post $post): Response {
...
}
}
我不想在这里明确指定转换器,而是想使用容器参数。但是,这似乎不起作用。
我检查过参数定义是否正确:
$ php bin/console debug:container --parameters
...
my.post.converter fos_rest.request_body
但是我不能使用它:
/**
* @ParamConverter("post", converter="%my.post.converter%")
*/
No converter named '%my.post.converter%' found for conversion of
parameter 'post'.
我发现 other questions 表明应该可以使用参数。至少在使用 @Route
.
等其他注释时是这样
这是 @ParamConverter
注释的限制(= @Route
注释的特殊功能),还是我的设置有问题?
我知道在此示例中还有其他方法可以指定不同的转换器。然而,这只是一个例子,问题是,是否可以在这里使用参数,或者我是否犯了一些错误。
并非所有注释都是平等的。每个都有自己的处理器,每个注释参数都有不同的接受输入。
注释只是启用一些底层组件,所以有时(可能大多数时候)如果你可以在注释中使用容器参数,那是因为底层组件支持为该参数使用容器参数(就像现在一样)路由组件的情况,可以通过 annotations/attributes)
以外的其他方式配置
在问题提供的示例中使用容器参数不会特别有用,如果有的话。
该参数需要一个 服务 ID,并且由于这些 ID 是在容器配置中定义的(与配置参数的位置相同), 将定义移动到参数将一无所获。
如果你想让它“可配置”,可以使用自定义服务 ID you could define as an alias to the real service,这样你就可以拥有多个转换器并通过配置为正确的转换器取别名。
不相信这在现实生活中会有用,但您的应用程序约束可能完全不同。
通常可以在 Symfony 5.3+ 的 method/class 注释中使用容器参数吗?
例如,我的一个操作方法使用 @ParamConverter
注释,使用 FOSRest RequestBodyParamConverter
:
class SomeController extends AbstractController {
/**
* @ParamConverter("post", converter="fos_rest.request_body")
*/
public function sync(Request $request, Post $post): Response {
...
}
}
我不想在这里明确指定转换器,而是想使用容器参数。但是,这似乎不起作用。
我检查过参数定义是否正确:
$ php bin/console debug:container --parameters
...
my.post.converter fos_rest.request_body
但是我不能使用它:
/**
* @ParamConverter("post", converter="%my.post.converter%")
*/
No converter named '%my.post.converter%' found for conversion of parameter 'post'.
我发现 other questions 表明应该可以使用参数。至少在使用 @Route
.
这是 @ParamConverter
注释的限制(= @Route
注释的特殊功能),还是我的设置有问题?
我知道在此示例中还有其他方法可以指定不同的转换器。然而,这只是一个例子,问题是,是否可以在这里使用参数,或者我是否犯了一些错误。
并非所有注释都是平等的。每个都有自己的处理器,每个注释参数都有不同的接受输入。
注释只是启用一些底层组件,所以有时(可能大多数时候)如果你可以在注释中使用容器参数,那是因为底层组件支持为该参数使用容器参数(就像现在一样)路由组件的情况,可以通过 annotations/attributes)
以外的其他方式配置在问题提供的示例中使用容器参数不会特别有用,如果有的话。
该参数需要一个 服务 ID,并且由于这些 ID 是在容器配置中定义的(与配置参数的位置相同), 将定义移动到参数将一无所获。
如果你想让它“可配置”,可以使用自定义服务 ID you could define as an alias to the real service,这样你就可以拥有多个转换器并通过配置为正确的转换器取别名。
不相信这在现实生活中会有用,但您的应用程序约束可能完全不同。