Моя страница
Сущность пользователя:
<?php
s
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use App\Validator\Constraints as AssertPerso;
/**
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ORM\Table(name="app_user")
*/
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne (targetEntity="Formation")
*/
private $customerName;
public function getId(): ?int
{
return $this->id;
}
/**
* @return CustomerName
*/
public function getCustomerName()
{
return $this->customerName;
}
public function setCustomerName($customerName): self
{
$this->customerName = $customerName;
return $this;
}
}
Сформированный объект:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\FormationRepository")
*/
class Formation
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=180, unique=true)
*/
private $customerName;
public function getId(): ?int
{
return $this->id;
}
/**
* @return CustomerName
*/
public function getCustomerName()
{
return $this->customerName;
}
public function setCustomerName($customerName): self
{
$this->customerName = $customerName;
return $this;
}
public function __toString()
{
return $this->customerName;
}
}
и моя форма UserType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('customerName', null, array(
'label' => 'Client ',
'required' => true)
)
->add('submit', SubmitType::class, ['label_format' => "Register", 'attr'=>['class'=>'btn-primary btn-block']]);
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
array($this, 'preSetData')
);
}
public function preSetData(FormEvent $event)
{
$form = $event->getForm();
$user = $event->getData();
// $form->remove('customerName');
$user->setEnabled(true);
}
В моей базе данных "формирование" у меня есть customer_name "xxx".
Я хочу, чтобы, когда пользователь регистрировался, установил customer_name_id в моей таблице "user" с доменом электронной почты, если этоадрес электронной почты похож на «xxxx», и если домен этого сообщения не соответствует имени_пользователя, отобразится ошибка
Не могли бы вы мне помочь, пожалуйста?Спасибо
редактировать с ответом Ребру:
Мне удалось сделать пользовательский валидатор, чтобы проверить, является ли домен существующим доменом в «формировании»
public function validate($value, Constraint $constraint)
{
$mailParts = explode('@', $value);
$mailParts = explode('.', $mailParts[1]);
$domain = $mailParts[0];
if(!$this->entityManager->getRepository(Formation::class)->findBy(array('customerName' => $domain))){
$this->context->buildViolation($constraint->messageWrongDomain)
->setParameter('{{ value }}', $this->formatValue($value))
->setCode(Email::INVALID_FORMAT_ERROR)
->addViolation();
return;
}
}
Но теперь я не знаю, как установить customer_name_id автоматически, когда пользователь регистрируется?
Спасибо
Редактировать 2: Я только что попробовал это для установки customer_name_id в пользовательской таблице.
В моем UserController:
$mailParts = explode('@', $user->getEmail());
$mailParts = explode('.', $mailParts[1]);
$domain = $mailParts[0];
$customerNameId = $entityManager->getRepository(Formation::class)->findBy(array('customerName' => $domain));
$customerNameId = $customerNameId[0]->getId();
Я получаю следующую ошибку:
Expected value of type "App\Entity\Formation" for association field "App\Entity\User#$customerName", got "integer" instead.