gpt4 book ai didi

Symfony3.3 : autowire a controller with scalar argument

转载 作者:行者123 更新时间:2023-12-04 08:50:36 25 4
gpt4 key购买 nike

我的 Controller 包含一个具有标量依赖性的操作 $bugReportRecipient .

class DefaultController
{
public function bugReportAction(SwiftTwigMailer $swiftTwigMailer, string $bugReportRecipient, Request $request)
{
// more code
}
}

我的服务定义如下所示:
AppBundle\Controller\DefaultController:
autowire: true
tags: ['controller.service_arguments']

如果我运行该操作,则会显示此错误:
Controller "AppBundle\Controller\DefaultController::bugReportAction()" requires that you provide a value for the "$bugReportRecipient" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one.
我怎样才能注入(inject)这个论点?到目前为止,我还没有在 symfony 文档中找到任何帮助。

[编辑]:

论据 $bugReportRecipient是在我的 parameters.yml 中定义的参数.

最佳答案

操作的值来自与以前相同的位置 - 您可以在函数定义中设置默认值,或者至少具有路由给定的值,可以这样设置:

* @Route("/bug-report/{bugReportRecipient}", name="bugreport", 
* defaults={"bugReportRecipient" = "username"})
SwiftTwigMailer被注入(inject)是因为 controller.service_arguments标记方式与 Request 相同以前有过。

注意 - 您仍然可以在 @Route 中为未出现在 {URL} 部分中的变量设置变量的默认值 - 但必须在某处进行设置。

我已经使用这种技术根据正在使用的特定路由为变量设置不同的值。
 * @Route("/",         name="homepage_menus", 
* defaults={"hasMenus"=true, "partnerLinks"=false})
* @Route("/partners", name="homepage_partner_footer",
* defaults={"hasMenus"=false,"partnerLinks"=true})

这些变量(它们也已经在函数定义中设置了默认值)都不能出现在 URL 中,而是根据使用的路由进行设置。

如果 $bugReportRecipient 是一个参数,它可以像这样在服务定义中设置:
arguments:
$bugReportRecipient: "%kernel.environment%" # or whatever

似乎没有办法在操作级别设置它,因此您必须使 Controller 成为更正式的服务,并至少在类级别设置此参数。

您也可以使用表达式语言来执行此操作。
services:
AppBundle\Mailer:
arguments: ["@=container.hasParameter('some_param') ? parameter('some_param') : 'default_value'"]

关于Symfony3.3 : autowire a controller with scalar argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44387103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com