当前位置: 首页 > 知识库问答 >
问题:

无法将参数传递给Symfony 3.3中的服务

胡利
2023-03-14

我在Symfony 3.3的服务中使用了一个参数,但我不断收到错误。

错误

[Symfony\Component\DependencyInjection\Exception\AutowiringFailedException]无法自动连线服务“AppBundle\service\ApiInterface”:方法“\uuu construct()”的参数“$api\u endpoint”必须具有类型提示或显式给定值。

config.yml

services:
app.security.login_form_authenticator:
    class: AppBundle\Security\LoginFormAuthenticator
    autowire: true
    arguments: ['@doctrine.orm.entity_manager']
app.service.api_interface:
    class: AppBundle\Service\ApiInterface
    arguments:
      $api_endpoint: "%endpoint test%"

_defaults:
    autowire: true
    autoconfigure: true
    public: false

AppBundle\:
    resource: '../../src/AppBundle/*'
    exclude: '../../src/AppBundle/{Entity,Repository,Tests}'

AppBundle\Controller\:
    resource: '../../src/AppBundle/Controller'
    public: true
    tags: ['controller.service_arguments']

Api接口。php

use Unirest;

class ApiInterface
{

private $api_endpoint;

public function __construct(string $api_endpoint)
{
    $this->timeout = 1;

    echo 'form apiinterface construct: ' . $api_endpoint;

}

任何感激的帮助都让我觉得自己在做一份简单的工作!

共有1个答案

阴永逸
2023-03-14

问题是您有两个不同的服务:app.service.api_interfaceAppBundle\Service\ApiInterface。第一是配置好,第二不是。

如果您必须需要app.service.api_interface服务,您可以更改您的配置,以便将第一个作为第二个的别名,如下所示:

app.service.api_interface: '@AppBundle\Service\ApiInterface'
AppBundle\Service\ApiInterface:
    arguments:
        $api_endpoint: "%endpoint test%"

通过配置,您不会配置AppBundle\Service\apinterface服务,而是配置应用程序。服务api_接口服务。根据我的建议,您可以配置这两个服务。

如果您不需要应用程序。服务api_接口服务,您只能让一个服务:

AppBundle\Service\ApiInterface:
    arguments:
        $api_endpoint: "%endpoint test%" 

此声明覆盖AppBundle\Service\apinterface服务。您可以使用下面的id(类名)覆盖导入的任何服务:最好将此覆盖移动到AppBundle\声明下面。

最终文件可以是这样的:

#app/config/services.yml
services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    AppBundle\:
        resource: '../../src/AppBundle/*'
        exclude: '../../src/AppBundle/{Entity,Repository,Tests}'

    AppBundle\Controller\:
        resource: '../../src/AppBundle/Controller'
        public: true
        tags: ['controller.service_arguments']

    app.security.login_form_authenticator: '@AppBundle\Security\LoginFormAuthenticator'
        # autowire: true #Optional, already set in _defaults
        # arguments: ['@doctrine.orm.entity_manager'] # Optional because of autowiring

    app.service.api_interface: '@AppBundle\Service\ApiInterface' 
    AppBundle\Service\ApiInterface:
        arguments:
            $api_endpoint: "%endpoint test%"

文档:手动连接参数

文档:显式配置服务和参数

此外,我建议您删除参数名%endpoint test%的空格(例如,将其重命名为%endpoint\u test%

 类似资料:
  • 我有一个片段a,包含一个片段B。 当片段A处于onActivityCreated生命周期中时,我想从片段A向片段B传递一个参数(因为我有一个来自viewmodel的数据,该数据此时到达)。 在我的片段B中,我无法得到这个论点。我有一个空异常。 你有办法解决我的问题吗? 这是我的代码 片段A 片段B fragment_a.xml

  • 问题内容: 我正在尝试调用webservice方法并将参数传递给它。 这是我的网络服务方法: 这是我的目标C代码: 因此,当我致电GetHelloWorld时,它的效果很好,并且: 显示HelloWorld,但是如何调用GetHelloWorldWithParam?如何传递参数? 我尝试: 并将以下两行添加到请求中: 我有错误: 谢谢您的帮助!泰迪熊 问题答案: 我已经使用了您的代码并进行了一些修

  • 我最近开始学习Swift,遇到了一个关于闭包的问题。我试图将开车的参数传递给func travel并收到错误消息:无法将类型'()'的值转换为预期的参数类型'()- 有人能善意地建议吗?赞赏!

  • 问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具

  • 问题内容: 我正在使用Go内置的http服务器,并拍拍来响应一些URL: 我需要向该处理函数传递一个额外的参数-一个接口。 如何向处理程序函数发送额外的参数? 问题答案: 通过使用闭包,您应该能够做您想做的事情。 更改为以下内容(未测试): 然后对

  • 我在解一个有很多常数的非线性方程 我创建了一个用于解决以下问题的函数: 然后我想做: 但是正在解包并向函数传递太多参数,因此我得到: TypeError:terminalV()正好接受2个参数(给定6个) 那么,我的问题是,我是否可以通过某种方式将元组传递给调用的函数?