尝试将Doctrine dbal连接传递给控制器中的构造。
我正在关注此链接,但它无效:
How do you access Doctrine DBAL in a Symfony2 service class?
这是我在app / config / config.yml
中的服务services:
form1:
class: Test\TestBundle\Controller\FormController
arguments: [@doctrine.dbal.form1_connection]
这是我的带有构造的控制器
namespace Test\TestBundle\Controller;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Routing\ClassResourceInterface;
use FOS\RestBundle\Util\Codes;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Doctrine\DBAL\Connection;
class FormController extends FOSRestController implements ClassResourceInterface
{
private $connection;
public function __construct(Connection $dbalConnection) {
$this->connection = $dbalConnection;
}
}
我收到此错误“消息”:“可捕获的致命错误:传递给Test \ TestBundle \ Controller \ FormController :: __ construct()的参数1必须是Doctrine \ DBAL \ Connection的实例,没有给定,在/ srv中调用第2449行的/test/tmp/dev/cache/classes.php,在/vagrant/test.com/src/Test/TestBundle/Controller/FormController.php中定义
这是app / config / routing.yml
test_form:
pattern: /api/v4/forms.{_format}
defaults: { _controller: TestTestBundle:Form:cget, _format: json }
requirements:
_method: GET
任何帮助都会很棒。 THX
答案 0 :(得分:1)
确定。基本问题是_controller:TestTestBundle:Form:cget不使用服务容器来创建FormController。因此没有注射。您需要将控制器配置为服务。
http://symfony.com/doc/current/cookbook/controller/service.html
您的路由将如下所示:
test_form:
pattern: /api/v4/forms.{_format}
defaults: { _controller: form1:cgetAction, _format: json }
requirements:
_method: GET
然而,这将产生第二个问题,因为您的控制器最终从Symfony基本控制器扩展,这需要注入容器。因此,您需要将服务文件调整为:
services:
form1:
class: Test\TestBundle\Controller\FormController
arguments: ['@doctrine.dbal.form1_connection']
calls:
- [setContainer, ['@service_container']]
我认为应该让你去。
答案 1 :(得分:0)
我不知道你的服务,也许你需要这个:doctrine.dbal.default_connection。