Witam
Chciałbym żebyście sprawdzili kod na razie jest tylko rejestracja z dokumentacji symfony ale trochę przerobiłem:
<?php
namespace App\Controller;
use App\Form\UserType;
use App\Service\FormErrorsConverter;
use App\Service\Security;
use FOS\RestBundle\Controller\AbstractFOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class SecurityController extends AbstractFOSRestController
{
/**
* @Rest\Post("/register", name="user_register")
*
* @param Request $request
* @param Security $security
* @param FormErrorsConverter $converter
* @param UserPasswordEncoderInterface $encoder
*
* @return Response
*/
public function register(
Request $request,
Security $security,
FormErrorsConverter $converter,
UserPasswordEncoderInterface $encoder
): Response
{
$form = $this->createForm(UserType::class, null);
$data = json_decode($request->getContent(), true);
$form->submit($data);
if($form->isValid()) {
$data = $form->getData();
$registerAction = $security->registerUser($data, $encoder);
return $this->json([
'success' => $registerAction
], Response::HTTP_OK);
}
return $this->json([
'error' => "Form is not valid",
'errors_fields' => $converter->convertErrorsFromFrom($form),
], Response::HTTP_BAD_REQUEST);
}
}
<?php
namespace App\Form;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', TextType::class)
->add('password', PasswordType::class)
->add('email', EmailType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
public function getName()
{
return 'user';
}
}
<?php
namespace App\Service;
use App\Entity\User;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class Security
{
private $entityManager;
private $userRepository;
public function __construct(
EntityManagerInterface $entityManager,
UserRepository $userRepository
)
{
$this->entityManager = $entityManager;
$this->userRepository = $userRepository;
}
public function registerUser(User $user, UserPasswordEncoderInterface $encoder)
{
$password = $encoder->encodePassword($user, $user->getPassword());
$user->setPassword($password);
$this->entityManager->persist($user);
$this->entityManager->flush();
return $user->getId();
}
}
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(
* fields={"username", "email"}
* )
*
* @ORM\HasLifecycleCallbacks()
*/
class User implements UserInterface, \Serializable
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=50, unique=true)
* @Assert\Length(min=3, max="50")
* @Assert\NotBlank()
*/
private $username;
/**
* @ORM\Column(type="string", length=255)
* @Assert\NotBlank()
* @Assert\Length(min=8)
*/
private $password;
/**
* @ORM\Column(type="string", length=255, unique=true)
* @Assert\NotBlank()
* @Assert\Email(
* message = "The email '{{ value }}' is not a valid email.",
* checkMX = true
* )
*/
private $email;
/**
* @ORM\Column(type="boolean")
* @Assert\NotBlank()
*/
private $isActive;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $createdAt;
public function __construct()
{
$this->isActive = true;
}
public function getId(): ?int
{
return $this->id;
}
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getIsActive(): ?bool
{
return $this->isActive;
}
public function setIsActive(bool $isActive): self
{
$this->isActive = $isActive;
return $this;
}
public function getSalt()
{
return null;
}
public function getRoles()
{
return array('ROLE_USER');
}
/**
* @ORM\PrePersist()
*/
public function setCreatedAt()
{
$this->createdAt = new \DateTime();
}
public function eraseCredentials()
{
}
/** @see \Serializable::serialize() */
public function serialize()
{
return serialize(array(
$this->id,
$this->username,
$this->password,
));
}
/** @see \Serializable::unserialize() */
public function unserialize($serialized)
{
list (
$this->id,
$this->username,
$this->password,
) = unserialize($serialized, array('allowed_classes' => false));
}
}