2015-02-09 2 views
0

Я следую за этим tutorial и все, что я пытаюсь сделать, это сделать простую форму. Я пользовательский бутстрапированные компоненты Symfony2 (я в основном с использованием почти все без FrameworkBundle), поэтому у меня есть такой код:Symfony2 Forms Without a Class

$defaultData = array('message' => 'Type your message here'); 
     $form = Forms::createFormFactory()->createBuilder($defaultData) 
     ->add('name', 'text') 
     ->add('email', 'email') 
     ->add('message', 'textarea') 
     ->add('send', 'submit') 
     ->getForm(); 

Вы можете увидеть только разница в том, как я получение FormFactory экземпляра. Вот что я получаю, хотя, как ошибка:

Uncaught exception 'Symfony\Component\Form\Exception\UnexpectedTypeException' with message 'Expected argument of type "string, Symfony\Component\Form\ResolvedFormTypeInterface or Symfony\Component\Form\FormTypeInterface", "array" given' in

Любые идеи о том, что я делаю неправильно? Благодаря!

+0

Если вы следуете учебник, почему вы используете 'Forms :: createFormFactory() -> createBuilder ($ defaultData)' и 'НЕ $ this-> createFormBuilder ($ defaultData)'? – sjagr

+0

Я читаю учебник, чтобы получить эту идею, так как я сказал, что я настраиваю компоненты. Однако, если вы читаете Контроллер, метод делает это $ this-> container-> get ('form.factory') -> createBuilder ('form', $ data, $ options); , который в основном вызывает сервис Form Factory, я считаю, что это будет равно Forms :: createFormFactory(), а затем он вызывает createBuilder (проверьте мой код), поэтому я не вижу, где разница. – gentec

+0

Предлагайте начать здесь: http://symfony.com/doc/current/components/form/introduction.html#creating-a-simple-form, где говорится об автономных компонентах. Получите пример для работы, а затем, возможно, добавьте некоторые вещи. – Cerad

ответ

0

Вы не следуете инструкциям, как описано. Forms::createBuilder() method хочет знать, какой тип формы вы создаете в первом аргументе, а не по умолчанию. Параметры по умолчанию предназначены для второго параметра в этом контексте. Вы можете видеть разницу, когда вы examine the createFormBuilder method в документах API Controller.

Вы должны использовать метод createFormBuilder() помощника в учебнике, как она проходит необходимые аргументы для метода createBuilder() внутренне от вашего имени:

$defaultData = array('message' => 'Type your message here'); 
     $form = $this->createFormBuilder($defaultData) 
     ->add('name', 'text') 
     ->add('email', 'email') 
     ->add('message', 'textarea') 
     ->add('send', 'submit') 
     ->getForm(); 

Или что-то подобное должно работать, если вы настаиваете на делать это ваш путь:

// ... 
$form = Forms::createFormFactory()->createBuilder('form', $defaultData) 
// ... 
+0

Аргумент 1, переданный Symfony \ Component \ Form \ Extension \ Core \ Type \ FormType :: setDefaultOptions() должен быть экземпляром Symfony \ Component \ OptionsResolver \ OptionsResolverInterface, экземпляр Symfony \ Component \ OptionsResolver \ OptionsResolver, очевидно, у меня есть пробовал это aleady, и его не работает – gentec