2016-09-13 3 views
1

У меня возникла проблема при создании выпадающего списка (категория, подкатегория) вместо ввода текстовых полей в FormBuilderInterface Когда я меняю его на ввод текста, все работает хорошо.Ожидаемый аргумент типа «строка», значение MyEntity

Вот мой код FormType

namespace Expatservice\ManagerBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; 
use Symfony\Component\Form\Extension\Core\Type\FileType; 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 
use Doctrine\ORM\EntityRepository; 

class ServiceType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('title') 
      ->add('category', EntityType::class, array(
       'class' => 'ExpatserviceCategoryBundle:Category', 
       'query_builder' => function (EntityRepository $er) { 
        return $er->createQueryBuilder('c') 
        ->where('c.parent = 0') 
        ->orderBy('c.title', 'ASC'); 
       }, 
       'choice_value' => 'title', 
       'choice_label' => 'title' 
      )) 
      ->add('subcategory', EntityType::class, array(
       'class' => 'ExpatserviceCategoryBundle:Category', 
       'query_builder' => function (EntityRepository $er) { 
        return $er->createQueryBuilder('c') 
        ->where('c.parent = 2') 
        ->orderBy('c.title', 'ASC'); 
       }, 
       'choice_value' => 'title', 
       'choice_label' => 'title' 
      )) 
      ->add('description') 
      ->add('image', FileType::class, array('data_class' => null, 'required'=>false)); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaultOptions(array('data_class' => 'Expatservice\ManagerBundle\Entity\Service')); 
    } 

    public function getName() 
    { 
     return 'expantservice_managerbundle_service'; 
    } 
} 

Я понимаю проблему, но не может понять, как это исправить, и не не нашел ничего в Интернете.

+0

Ваш вопрос не ясен. Можете ли вы рассказать нам, в какой строке происходит ошибка, и указать линию. Благодаря! –

+0

Я не уверен, что правильно понимаю, но имеет ли объект, о котором идет речь, функцию '__toString()'? – pusle

+0

Элвин, точная строка: «Ожидаемый аргумент типа« строка »,« Expatservice \ CategoryBundle \ Entity \ Category », указанный« UnexpectedTypeException: if (! Is_scalar ($ value) &&! (Is_object ($ value) && method_exists ($ value, '__toString'))) { throw new UnexpectedTypeException ($ value, 'string'); } $ stringValue = (string) $ value; –

ответ

0

Я должен использовать магическую функцию __toString() для получения правильного типа данных при обработке моей формы.

Чтобы быть уверенным, что мы получим строку, Entity часть должна выглядеть следующим образом:

/** 
* Get title 
* 
* @return string 
*/ 
public function getTitle() 
{ 
    return $this->title; 
} 

public function __toString() { 
    return $this->title; 
} 
Смежные вопросы