Tôi đã tạo dịch vụ của riêng mình và tôi cần nhập học thuyết EntityManager, nhưng tôi không thấy điều đó __construct()
được gọi trong dịch vụ của mình và việc tiêm không hoạt động.
Đây là mã và cấu hình:
<?php
namespace Test\CommonBundle\Services;
use Doctrine\ORM\EntityManager;
class UserService {
/**
*
* @var EntityManager
*/
protected $em;
public function __constructor(EntityManager $entityManager)
{
var_dump($entityManager);
exit(); // I've never saw it happen, looks like constructor never called
$this->em = $entityManager;
}
public function getUser($userId){
var_dump($this->em ); // outputs null
}
}
Đây là services.yml
trong gói của tôi
services:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
Tôi đã nhập .yml đó config.yml
trong ứng dụng của mình như vậy
imports:
# a few lines skipped, not relevant here, i think
- { resource: "@TestCommonBundle/Resources/config/services.yml" }
Và khi tôi gọi dịch vụ trong bộ điều khiển
$userservice = $this->get('test.common.userservice');
$userservice->getUser(123);
Tôi nhận được một đối tượng (không phải null), nhưng $this->em
trong UserService là null và như tôi đã đề cập, hàm tạo trên UserService chưa bao giờ được gọi
Một điều nữa, Controller và UserService nằm trong các gói khác nhau (tôi thực sự cần nó để giữ cho dự án có tổ chức), nhưng vẫn còn: mọi thứ khác hoạt động tốt, tôi thậm chí có thể gọi
$this->get('doctrine.orm.entity_manager')
trong cùng một bộ điều khiển mà tôi sử dụng để lấy UserService và lấy đối tượng EntityManager hợp lệ (không phải null).
Có vẻ như tôi đang thiếu phần cấu hình hoặc một số liên kết giữa cấu hình UserService và Doctrine.
__constructor
là lỗi.