我正在学习Symfony2以及如何进行依赖注入。问题可能有点长,但我想我必须包括导致此错误的所有代码。
所以我在Symfony2项目Interfacr中有一个工厂设计模式 - >工厂 - >控制器。
我的界面文件:
type
工厂档案:
<?php
namespace Inter\DemoBundle\Interfaces;
interface ObjectInterface {
public function create($testObject);
}
控制器文件:
<?php
namespace Inter\DemoBundle\Factory;
use Inter\DemoBundle\Interfaces\ObjectInterface;
class ObjectFactory implements ObjectInterface{
public function create($testObject)
{
$testObject = 'Hello World';
return $testObject;
}
}
服务档案:
<?php
namespace Inter\DemoBundle\Controller\DataController;
use Inter\DemoBundle\Factory\ObjectFactory;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
/**
* @Route("/test" service="inter.controller")
*/
class DataController
{
public $object;
public function __construct(
ObjectFactory $objectFactory
){
$this->object = $objectFactory;
}
public function test()
{
return $this->object;
}
}
错误:
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<!--Factory Services-->
<service id="inter.factory.object.factory"
class="Inter\DemoBundle\Factory\ObjectFactory">
</service>
<!--Controller Services-->
<service id="inter_controller" class="Inter\DemoBundle\DataController">
<argument type="service" id="inter.factory.object.factory" />
</service>
</services>
</container>
(“/ home / tomazi / Dev / interface.test / app / config / routing_dev.yml”&gt; “/home/tomazi/Dev/interface.test/app/config/routing.yml”&gt;
“/ home / tomazi / dev / interface.test / src / Inter / DemoBundle / Controller /”&gt; “/home/tomazi/Dev/interface.test/app/config/routing_dev.yml”)。
我试图解决这个问题已经很久了但是没有运气我谷歌它现在在那里回答比人们抱怨这是一个错过导致错误smymfony2可能与路由无关。
请有人帮忙吗
答案 0 :(得分:2)
您忘记在注释中添加逗号,
。
/**
* @Route("/test" service="inter.controller")
*/
应该是:
/**
* @Route("/test", service="inter.controller")
*/
另外,请记住,您可能在此输入错误的命名空间:
<service id="inter_controller" class="Inter\DemoBundle\DataController">
这是您现在的控制器定义:
<?php
namespace Inter\DemoBundle\Controller\DataController;
class DataController {}
请仔细检查你写的所有内容,必须有一些逻辑错误。我试图重现你的问题,但一切正常。
services.yml
services:
test.service:
class: AppBundle\Service\TestService
service.controller:
class: AppBundle\Controller\ServiceController
arguments:
- @test.service
TestService.php
namespace AppBundle\Service;
class TestService {
private $property = 'test';
}
ServiceController.php
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
/**
* @Route("/test", service="service.controller")
*/
class ServiceController {
private $object;
public function __construct($service) {
$this->object = $service;
}
/**
* @Route("/testing")
**/
public function test() {
var_dump($this->object);
exit;
}
}
访问/app_dev.php/test/testing
会得到以下输出(转储):
object(AppBundle\Service\TestService)[2215]
private 'property' => string 'test' (length=4)
正如所料。所以,再次检查你的代码。