如何在服务类中使用EntityManager?

时间:2018-02-23 01:53:49

标签: php symfony

我在做需要注册用户的app。

  

RegisterController

class RegisterController extends Controller
 {
   public function indexAction(Request $request){        
   }

   public function registerUserAction(Request $request) {
    $newUser = new Register();
    $newUser = $newUser->addNewUser($username, $password);
   }
 }
  

服务登记

class Register
 {
   public function addNewUser($username, $password) {
    if(self::validateUsername($username) && self::validatePassword($password)) {
    $em = $this->getDoctrine()->getManager();
    }
   }
}
  

配置/ services.yaml   服务:

_defaults:
    autowire: true     
    autoconfigure: true 
    public: false     
App\:
    resource: '../src/*'
    exclude: '../src/{Entity,Migrations,Tests}'
App\Controller\:
    resource: '../src/Controller'
    tags: ['controller.service_arguments']

当然,我无法访问Register中的学说和实体经理,我也不知道如何做到这一点。 请不要发布有关服务容器的symfony文档,我已经阅读了所有内容并且没有得到它。

1 个答案:

答案 0 :(得分:1)

首先将实体管理器注入您的注册服务:

namespace App\Service;

use Doctrine\ORM\EntityManagerInterface;

class Register
{
    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }
    public function addNewUser($username,$password)
    {
        $user = new User($username,$password);

        $this->entityManager->persist($user);

        return $user;
    }
}

接下来,我们利用一个有点不寻常的Symfony功能,有时称为控制器动作注入:

namespace App\Controller;

use App\Service\Register;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class RegisterController
{
    public function registerUserAction(Request $request, Register $register)
    {
        $newUser = $register->addNewUser($username, $password);
        return new Response('Register Userx');
    }
}

就是这样。 Symfony autowire负责连接。希望这会使一些服务容器文档更容易理解。