Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在Symfony 3中为服务禁用自动布线并使用注释?_Symfony_Autowired - Fatal编程技术网

是否可以在Symfony 3中为服务禁用自动布线并使用注释?

是否可以在Symfony 3中为服务禁用自动布线并使用注释?,symfony,autowired,Symfony,Autowired,在DI中有自动连接、注释定义和PHP定义 在Symfony 3.3中,默认情况下启用自动布线。因此,如果我禁用自动布线,我可以使用注释来定义服务吗 class Foo { /** * @Inject({"my.specific.service"}) */ public function __construct(Bar $param1) { } } 更新:使用JMSDiExtraBundle 在控制器中调用服务: namespace Media

在DI中有自动连接、注释定义和PHP定义

在Symfony 3.3中,默认情况下启用自动布线。因此,如果我禁用自动布线,我可以使用注释来定义服务吗

class Foo
{
    /**
     * @Inject({"my.specific.service"})
     */
    public function __construct(Bar $param1)
    {
    }
}
更新:使用JMSDiExtraBundle

在控制器中调用服务:

namespace MediaBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class DefaultController extends Controller
{
    /**
     * @Route("/media")
     */
    public function indexAction()
    {
        $someService = $this->get('some.service.id');

        return $this->render('MediaBundle:Default:index.html.twig');
    }
}

结果:
您请求了一个不存在的服务“some.service.id”。

您的服务是否被注入了某个地方?如果没有,它将由于
public=false
而从容器中删除,请参见

尝试时发生了什么?我自己不使用JMSDi捆绑包,但我认为它可以正常工作。我安装了JMSDibundle。但是当我调用服务时,找不到它。是的,更改public=true将解决问题。最后,可以使用注释来在SyfFion 3中使用JMSDIAB定义服务。现在问题变成:为什么要做这样的事情?我认为注释定义比YAML/XML定义更能维护。服务的名称是在某个文件中定义的,因此我可以从类中获取服务的名称,而不是从yml或xml文件中搜索。这有点夸张,因为我知道有些人确实喜欢注释,而有些人不喜欢。在您问题中的示例中,如果我正在查看您的控制器操作,那么我怀疑我是否知道some.service.id是在哪里定义的,尽管我假设您至少会使用doc类型提示。但这里是踢球者,有了autowire,indexAction(Foo$someService)就可以做到这一点。不需要特殊的some.service.id,也不需要使用服务定位器模式。不需要注释,也不需要(在大多数情况下)services.yaml条目。只是想一想。
namespace MediaBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class DefaultController extends Controller
{
    /**
     * @Route("/media")
     */
    public function indexAction()
    {
        $someService = $this->get('some.service.id');

        return $this->render('MediaBundle:Default:index.html.twig');
    }
}