2017-06-06 25 views
4

我的控制器包含一個具有標量依賴項的操作$bugReportRecipientSymfony3.3:使用標量參數自動裝入控制器

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.

我怎麼能注入這種說法?到目前爲止,我還沒有在symfony文檔中找到任何有用的信息。

[編輯]:

的參數$bugReportRecipient是其在我的parameters.yml定義的參數。

+0

公共職能bugReportAction(SwiftTwigMailer $ swiftTwigMailer,$ bugReportRecipient,請求$要求)只是沒有串 –

+0

沒有,得到了同樣的錯誤。 –

+0

爲什麼使用$ bugReportRecipient? –

回答

0

該操作的值之前,來自同一個地方 - 你要麼設置在函數定義的默認值,或至少具有由途徑給予一個值,該值可能設置像這樣:

* @Route("/bug-report/{bugReportRecipient}", name="bugreport", 
*  defaults={"bugReportRecipient" = "username"}) 

由於controller.service_arguments標記與Request之前一樣,因此注入了SwiftTwigMailer標記。

注 - 您仍然可以在@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 

似乎沒有成爲一個方法來設置它的行動水平,所以你將不得不讓控制器成爲更正式的服務,並且至少在類級別設置這個參數。

您也可以使用表達式語言來執行此操作。

services: 
    AppBundle\Mailer: 
     arguments: ["@=container.hasParameter('some_param') ? parameter('some_param') : 'default_value'"] 
+0

'bugReportRecipient'參數來自服務容器,所以它與我的路由定義無關 –

相關問題