Php 将服务注入控制器
我正在学习Symfony2,我正在努力向控制器中注入服务。我得到这个错误:Php 将服务注入控制器,php,symfony,Php,Symfony,我正在学习Symfony2,我正在努力向控制器中注入服务。我得到这个错误: Catchable Fatal Error: Argument 1 passed to Inter\DemoBundle\Controller\DataController::__construct() must be an instance of Inter\DemoBundle\Factory\ObjectFactory, none given, called in /home/tomazi/Dev/interfac
Catchable Fatal Error: Argument 1 passed to Inter\DemoBundle\Controller\DataController::__construct() must be an instance of Inter\DemoBundle\Factory\ObjectFactory, none given, called in /home/tomazi/Dev/interface.test/app/cache/dev/classes.php on line 2138 and defined
我创建了一个非常基本的结构接口-->工厂-->控制器
我的界面:
<?php
namespace Inter\DemoBundle\Interfaces;
interface ObjectInterface {
public function create($testObject);
}
您需要修改路由以将其作为服务引用。例如:
# app/config/routing.yml
hello:
path: /hello
defaults: { _controller: inter.controller:indexAction }
如果您正在使用注释
/**
* @Route("/test", service="inter.controller")
*/
public function test()
{
return $this->object;
}
两件事:
*您可以从
Symfony\Bundle\FrameworkBundle\controller\controller
扩展控制器来解决此问题。它是一个扩展containerware
的基本Symfony类,因此它知道容器
如果您这样做,您可以像这样简单地解决您的所有问题:
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class SomeController extends Controller
{
public function someAction()
{
$someService = $this->get('some.service');
...
}
}
您的路由是否将控制器映射为服务?是的,我确实看过食谱。但仍然无法发现此处的问题。这实际上是一个很好的观点,但如果您查看我的DataCOntroller,我正在使用注释。如何添加默认值:{}那里。。。?通过AnnotationsName thing for annotations
@Route(/test),defaults={{u controller:inter.controller:testAction})
我想你的答案解决了我的问题,但现在我遇到了更多错误,如果你介意的话,我会把它们添加到问题中look@Tomazi,这个答案可能会有所帮助:Q是关于服务注入的。不是他打电话给构造器,所以他不需要传递任何东西。
FileLoaderImportCircularReferenceException in FileLoader.php line 97:
Circular reference detected in
"/home/tomazi/Dev/interface.test/app/config/routing_dev.yml"
("/home/tomazi/Dev/interface.test/app/config/routing_dev.yml" >
"/home/tomazi/Dev/interface.test/app/config/routing.yml" >
"/home/tomazi/Dev/interface.test/src/Inter/DemoBundle/Controller/" >
"/home/tomazi/Dev/interface.test/app/config/routing_dev.yml").
# app/config/routing.yml
hello:
path: /hello
defaults: { _controller: inter.controller:indexAction }
/**
* @Route("/test", service="inter.controller")
*/
public function test()
{
return $this->object;
}
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class SomeController extends Controller
{
public function someAction()
{
$someService = $this->get('some.service');
...
}
}