是否可以在Symfony 3中为服务禁用自动布线并使用注释?
在DI中有自动连接、注释定义和PHP定义 在Symfony 3.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
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');
}
}