I've read the other subjects but it doesn't solve my problem so:
I've got this
->add('role', 'choice', array( 'label' => 'I am:', 'mapped' => true, 'expanded' => true, 'multiple' => false, 'choices' => array( 'ROLE_NORMAL' => 'Standard', 'ROLE_VIP' => 'VIP', ) ))
And whatever I do, I get this error:
Notice: Array to string conversion in C:\xampp\htdocs\xxx\vendor\symfony\symfony \src\Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList.php line 458
In my form type the setRole method is not even called (when I rename it to some garbage the error still occurs). Why is this happening?
// EDIT
Full stack trace:
in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList.php at line 458 - */ protected function fixIndex($index) { if (is_bool($index) || (string) (int) $index === (string) $index) { return (int) $index; } at ErrorHandler ->handle ('8', 'Array to string conversion', 'C:\xampp\htdocs \xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList.php', '458', array('index' => array())) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList.php at line 458 + at ChoiceList ->fixIndex (array()) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList.php at line 476 + at ChoiceList ->fixIndices (array(array())) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\ChoiceList\SimpleChoiceList.php at line 152 + at SimpleChoiceList ->fixChoices (array(array())) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList.php at line 204 + at ChoiceList ->getIndicesForChoices (array(array())) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\DataTransformer\ChoiceToBooleanArrayTransformer.php at line 63 + at ChoiceToBooleanArrayTransformer ->transform (array()) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Form.php at line 1019 + at Form ->normToView (array()) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Form.php at line 332 + at Form ->setData (array()) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper.php at line 59 + at PropertyPathMapper ->mapDataToForms (object(User), object(RecursiveIteratorIterator)) in C:\xampp\htdocs\xxx\vendor\symfony\symfony\src\Symfony\Component\Form\Form.php at line 375 + at Form ->setData (object(User)) in C:\xampp\htdocs\xxx\vendor\friendsofsymfony\user-bundle\FOS\UserBundle\Controller\RegistrationController.php at line 49 + at RegistrationController ->registerAction (object(Request)) at call_user_func_array (array(object(RegistrationController), 'registerAction'), array(object(Request))) in C:\xampp\htdocs\xxx\app\bootstrap.php.cache at line 2770 + at HttpKernel ->handleRaw (object(Request), '1') in C:\xampp\htdocs\xxx\app\bootstrap.php.cache at line 2744 + at HttpKernel ->handle (object(Request), '1', true) in C:\xampp\htdocs\xxx\app\bootstrap.php.cache at line 2874 + at ContainerAwareHttpKernel ->handle (object(Request), '1', true) in C:\xampp\htdocs\xxx\app\bootstrap.php.cache at line 2175 + at Kernel ->handle (object(Request)) in C:\xampp\htdocs\xxx\web\app_dev.php at line 29 +
Symfony's trying to convert your $role(array property) to not multiple choice field(string).
There's several ways to deal with this problem:
Example:
<?php namespace Acme\DemoBundle\Form\DataTransformer; use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Exception\TransformationFailedException; class StringToArrayTransformer implements DataTransformerInterface { /** * Transforms an array to a string. * POSSIBLE LOSS OF DATA * * @return string */ public function transform($array) { return $array[0]; } /** * Transforms a string to an array. * * @param string $string * * @return array */ public function reverseTransform($string) { return array($string); } }
And then in your form class:
use Acme\DemoBundle\Form\DataTransformer\StringToArrayTransformer; /* ... */ $transformer = new StringToArrayTransformer(); $builder->add($builder->create('role', 'choice', array( 'label' => 'I am:', 'mapped' => true, 'expanded' => true, 'multiple' => false, 'choices' => array( 'ROLE_NORMAL' => 'Standard', 'ROLE_VIP' => 'VIP', ) ))->addModelTransformer($transformer));
You can read more about DataTransformers here: http://symfony.com/doc/current/cookbook/form/data_transformers.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With