我在做需要注册用户的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文档,我已经阅读了所有内容并且没有得到它。
答案 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负责连接。希望这会使一些服务容器文档更容易理解。