Sam*_*vin 5 php doctrine symfony doctrine-orm
我使用简化的控制器,没有服务容器.我正在尝试将学说注入服务中.这是错误:
ContextErrorException: Catchable Fatal Error: Argument 1 passed to Acme\Controller\WebController::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /home/hcs/Core/app/cache/dev/appDevDebugProjectContainer.php on line 3036 and defined in /home/hcs/Core/src/Acme/Controller/WebController.php line 28
Run Code Online (Sandbox Code Playgroud)
这是我的服务def:
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
orm:
mappings:
Acme:
type: annotation
dir: %kernel.root_dir%/../src/Acme/Model
prefix: Acme\Model
alias: Model
is_bundle: false
services:
WebController:
class: Acme\Controller\WebController
arguments: [@doctrine.orm.entity_manager ]
parent: elnur.controller.abstract
Run Code Online (Sandbox Code Playgroud)
和我的班级
use Doctrine\ORM\EntityManager;
/**
* @Service("WebController", parent="elnur.controller.abstract")
*/
class WebController extends AbstractController
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
Run Code Online (Sandbox Code Playgroud)
这是SF2容器的输出(php app/console container:debug | grep -i enity)
doctrine.orm.default_entity_manager container EntityManager5330e85ad5afb_546a8d27f194334ee012bfe64f629947b07e4919\__CG__\Doctrine\ORM\EntityManager
doctrine.orm.entity_manager n/a alias for doctrine.orm.default_entity_manager
doctrine.orm.validator.unique container Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator
form.type.entity container Symfony\Bridge\Doctrine\Form\Type\EntityType
translator container Symfony\Component\Translation\IdentityTranslator
Run Code Online (Sandbox Code Playgroud)
我也在服务定义中尝试了参数:["@ doctrine.orm.entity_manager"]但仍然没有.我已经尝试过清理我的缓存,但我不能为我的生活注入EM.我究竟做错了什么?
问题是你要为同一个类混合YAML服务定义和DiExtra注释.YAML定义已满并提供所需的依赖关系,但您尚未添加@InjectParams以使用@Service注释.基本上,您使用不同的方法创建单个类的两个服务,并且注释方法不完整.
@Service从类中删除注释,或者,如果您更喜欢注释(我这样做),也可以使用注释注入依赖项并删除YAML服务定义:
/**
* @InjectParams({
* "em" = @Inject("doctrine.orm.entity_manager")
* })
*/
public function __construct(EntityManager $em)
{
$this->em = $em;
}
Run Code Online (Sandbox Code Playgroud)
该@InjectParams标注的参数名称相匹配像$em像服务名称@em.由于没有@em服务,您必须覆盖与@Inject注释的默认匹配.
但有一种方法可以简化它.您可以@em在YAML配置文件中将实体管理器别名:
services:
em:
alias: doctrine.orm.entity_manager
Run Code Online (Sandbox Code Playgroud)
现在您可以简化@InjectParams注释:
/**
* @InjectParams
*/
public function __construct(EntityManager $em)
{
$this->em = $em;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11928 次 |
| 最近记录: |