Действительно. Не стоит использовать сущность для валидации. Сущность должна быть всегда валидной.
Использовал отдельный класс для валидации пароля.
namespace AppBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Password
{
/**
*
* @Assert\Length(
* min = 6,
* max = 64,
* minMessage = "Пароль должен содержать не меньше {{ limit }} символов",
* maxMessage = "Пароль должен содержать не меньше {{ limit }} символов"
* )
* * @Assert\NotBlank(
* message="Пароль не должен быть пустым"
* )
* @var string
*/
private $password;
/**
* Set password
*
* @param string $password
*
* @return Password
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Get password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
}
В контроллере
public function newPasswordAction(Request $request){
$password = new Password();
$form = $this->createForm(NewPassword::class, $password);
/........./
}
Класс формы
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
class NewPassword extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('password', RepeatedType::class, array(
'type' => PasswordType::class,
'invalid_message' => 'Поля паролей должны совпадать.',
'options' => array('attr' => array('class' => 'password-field')),
'required' => true,
'first_options' => array('label' => 'Новый пароль'),
'second_options' => array('label' => 'Повторение нового пароля'),
))
->add('save', SubmitType::class)
->add( 'new_password_hidden' , HiddenType :: class, [
'mapped' => false,
])
;
}
}