2014-02-12 34 views
2

在Symfony 2.4中,我想通過服務創建一個註冊表單。我玩弄了服務配置和表單組件工廠,但每次我得到以下異常:Symfony 2.4通過服務創建表單

可捕獲的致命錯誤:將參數1傳遞給Symfony \ Component \ Form \ Form :: __ construct()必須是Symfony的一個實例\分量\表格\ FormConfigInterface,給予

代碼如下Bestxtech \ UserBundle \表格\ RegistrationType的實例:

services: 
bestxtech.form.type.registration: 
    class: Bestxtech\UserBundle\Form\RegistrationType 
    arguments: [null] 
    tags: 
    - { name: form.type, alias: registration } 
    public: flase 
bestxtech.form.registration: 
    factory-method: create 
    factory-service: form.factory 
    class: Symfony\Component\Form\Form 
    arguments: ["@bestxtech.form.type.registration"] 

RegistrationType作爲

//Bestxtech\UserBundle\Form\RegistrationType 
<?php 
namespace Bestxtech\UserBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class RegistrationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('username') 
      ->add('plainPassword', 'repeated', array(
      'type'   => 'password', 
      'first_options' => array('label' => 'Password'), 
      'second_options' => array('label' => 'Confirm password'), 
      'invalid_message' => 'Password mismatch' 
      )) 
      ->add('email', 'email', array('label' => 'Email address')); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class'  => 'Bestxtech\UserBundle\Entity\User', 
      'validation_groups' => array('Registration') 
     )); 
    } 

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

如果有人能給我一些建議,會很好,謝謝。

回答

4

您的表單工廠服務定義是錯誤的。試着看看這個:http://symfony.com/doc/current/components/dependency_injection/factories.html

但是。你確定這是個好主意嗎?請注意,從FormFactorycreate方法需要兩個附加參數:$data$options。如果您按照您所示的方式定義構建表單,則無法將這些參數傳遞給create方法。

如果我是你,我會直接使用form.factory服務。就像這樣:

$formFactory = $container->get('form.factory'); 
$form = $formFactory->create($container->get('form.type.registration')); 

編輯:

的問題是你有使用破折號,而不是下劃線,請嘗試以下:

services: 
    bestxtech.form.type.registration: 
     class: Bestxtech\UserBundle\Form\RegistrationType 
     arguments: [null] 
     tags: 
     - { name: form.type, alias: registration } 
     public: flase 
    bestxtech.form.registration: 
     factory_method: create 
     factory_service: form.factory 
     class: Symfony\Component\Form\Form 
     arguments: ["@bestxtech.form.type.registration"] 
+0

你能告訴我一個正確的服務定義。我嘗試編輯這樣的: 參數: bestxtech.form.type.registration.class:Bestxtech \ UserBundle \表格\ RegistrationType 服務: bestxtech.form.registration: 工廠方法:創建 廠服務: form.factory 類:Symfony的\元器件\表格\表格 參數:[%bestxtech.form.type.registration.class%] ,但我仍然以下例外:傳遞給Symfony的\元器件\表格\ 參數1 Form :: __ construct()必須是Symfony \ Component \ Form \ FormConfigInterface的一個實例,給出的字符串爲 – Gavntery

+0

非常感謝!現在出現了一個新的錯誤。我正在嘗試修復它。 – Gavntery

相關問題