Я использую Symfony 3.3 и получаю эту ошибку TransformationFailedException при загрузке страницы моего профиля:
Невозможно преобразовать значение для пути свойства "почтовый индекс": ожидается числовое значение.
Значение почтового индекса для этого пользователя в базе данных:
34125abc '
Атрибут почтового индекса, определенный в объекте UserProfile:
/**
* @ORM\Column(type="string")
*/
private $postalcode;
Мой профильКонтроллер:
class ProfileController extends Controller{
/**
* @Route("/edit_profile", name="edit_profile")
*/
public function profileAction(Request $request){
$profile = $this->getDoctrine()->getManager()->getRepository('AppBundle:UserProfile')->findOneBy(['user_id' => $this->getUser()->getUserId()]);
// If no UserProfile exists, create a UserProfile Object to insert it into database after POST
if(null === $profile){
$profile = new UserProfile();
$profile->setUserId($this->getUser()->getUserId());
}
$form = $this->createForm(EditProfileFormType::class);
$form->setData($profile);
// only handles data on POST
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$result = $this->forward('AppBundle:API\User\Profile:update_profile', array(
'profile' => $profile
));
if(200 === $result->getStatusCode()){
$this->addFlash('success', "Profile successfully created!");
}
}
return $this->render(':User/Profile:edit_profile.html.twig', [
'EditProfileForm' => $form->createView(),
]);
}
}
Мой EditProfileFormType:
class EditProfileFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', ChoiceType::class, array(
'choices' => array(
'Mr' => 'Mr',
'Mrs' => 'Mrs'
)
))
->add('firstName')
->add('lastName')
->add('street')
->add('postalcode', NumberType::class)
->add('city')
->add('telephone')
->add('mobile')
->add('company')
->add('birthday' , BirthdayType::class)
->add('callback', CheckboxType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\UserProfile',
'validation_groups' => array('edit_profile')
]);
}
public function getBlockPrefix()
{
return 'app_bundle_edit_profile_form_type';
}
}
Таким образом, проблема здесь заключается в не числовом значении строки в базе данных
'34125abc'
, который хранится в объекте сущности $profile
и передается в форму с помощью $form->setData($profile);
Так, когда данные устанавливаются, выдается ошибка из-за Numbertype в этой строке ->add('postalcode', NumberType::class)
. Есть ли способ передать значение почтового индекса в форму, даже если оно не числовое, и проверять только тип номера при отправке формы? Потому что мне не нужна проверка, когда я передаю данные в форму. Как раз, когда это отправлено.