2013-02-22 2 views
2

Я пытаюсь отчаянно сохранить форму с сущностью City OneToMany Anagrafic. я вошел в «property_path» CityType форму, и я возвратил ошибку,Symfony2 Ожидаемый аргумент типа «object or array», «string» given

Expected argument of type “object or array”, “string” given 

Я не понимаю, что я делаю неправильно!

class Anagrafic 
{ 
/** 
* @ORM\ManyToOne(targetEntity="City", inversedBy="anagrafics", cascade={"persist"}) 
* @ORM\JoinColumn(name="city_id", referencedColumnName="id") 
*/ 
private $city; 
//.. 
//.. 
class City 
{ 
/** 
* @ORM\OneToMany(targetEntity="Anagrafic", mappedBy="city", cascade={"persist"}) 
*/ 
private $anagrafics; 
//... 
//... 
class CityType extends AbstractType 
{ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('comune', 'hidden', array('property_path' => 'city.id')) 
//.. 
//.. 
class AnagraficType extends AbstractType 
{ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('city', new CityType()) 

EDIT: Извините за неполной информации, это исключение:

CRITICAL - Symfony\Component\Form\Exception\UnexpectedTypeException: 
Expected argument of type "object or array", "string" given (uncaught exception) at 
/var/www/MyBusiness0_1/vendor/symfony/symfony/src/Symfony/Component/Form/Util/PropertyPath.php line 342 


/var/www/MyBusiness0_1/vendor/symfony/symfony/src/Symfony/Component/Form/Util/PropertyPath.php at line 342 
    for ($i = 0; $i <= $lastIndex; ++$i) { 
     if (!is_object($objectOrArray) && !is_array($objectOrArray)) { 
      throw new UnexpectedTypeException($objectOrArray, 'object or array'); 
     } 
     $property = $this->elements[$i]; 
+0

Какая у вас ошибка? – cheesemacfly

+2

это викторина! «Я получил ошибку и не покажу полный код или ошибку». – Fusselchen

+0

Это название. «Ожидаемый аргумент типа« объект или массив »,« строка »задано' – Lughino

ответ

2

проблема заключалась в том, что при передаче строки или числа symfony ожидает объект, поэтому нам нужно реализовать DataTransformer, чтобы превратить строку в объект и наоборот.

http://symfony.com/doc/master/cookbook/form/data_transformers.html

Проблема решена! ;-)

0

Похоже propertyPath ожидает объект или массив. Так эта линия не так:

$builder->add('comune', 'hidden', array('property_path' => 'city.id')) 

Вы передаете city.id здесь и что не должно быть строкой. Я не пользователь Symfony и не знаком с FormBuilder, поэтому вам нужно найти руководство по использованию опции property_path.

КПП. это не имеет ничего общего с доктриной 2, поэтому было бы целесообразно удалить этот тег.

+0

факт заключается в том, что если вы не используете «property_path», я получаю эту ошибку: «Исключение произошло при выполнении« INSERT INTO City »(город, zip, region_id, state_id) VALUES (?,?,?,?) ' с параметрами {"1": "8094", "2": null, "3": null, "4": null}: SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Столбец «zip» не может быть нулевым. Попытайтесь сохранить новый объект City, но City - это список городов, которые уже предопределены, и отношения City OneToMany Anagrafic не должны создавать новую сущность! Что не так? – Lughino

Смежные вопросы