簡體   English   中英

擴展具有更多表單字段的Sonata用戶捆綁包,獲取無法加載類型“ Application \\ Sonata \\ UserBundle \\ Form \\ RegistrationType”

[英]extending sonata user bundle with more form fields, get Could not load type “Application\Sonata\UserBundle\Form\RegistrationType”

我正在嘗試擴展注冊表單以顯示更多字段,但是嘗試了多種變體之后,我認為可能是錯誤,或者我在教程和帖子中看到的配置設置不適用於symfony 2.7,這讓我發瘋了,我想可能要等到我升級到3.4版,但到目前為止升級進展並不順利。

錯誤-

Could not load type 
                  "Application\Sonata\UserBundle\Form\RegistrationType"

表格-

namespace Application\Sonata\UserBundle\Form;

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

class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array 
$options)
{

    $builder->add('firstname')
        ->add('dateOfBirth');
}

public function getParent()
{
    return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}

public function getBlockPrefix()
{
    return 'app_user_registration';
}

// For Symfony 2.x
public function getName()
{
    return $this->getBlockPrefix();
}

}

config_dev.yml

  fos_user:
      db_driver: orm 
      firewall_name: secured_area
      user_class: Application\Sonata\UserBundle\Entity\User
      registration:
          form:
             type: Application\Sonata\UserBundle\RegistrationType
      group:
         group_class: Application\Sonata\UserBundle\Entity\User

services.yml

        services:
          app.form.registration: 
          class: Application\Sonata\UserBundle\Form\RegistrationType
          arguments: [%fos_user.model.user.class%]
          tags:
          - { name: form.type, alias: app_user_registration }

因此,如前所述,它是symfony 2.7和Sonata用戶捆綁3.2版,對此提供了任何幫助

錯誤的代碼部分是config_dev.yml中的這一行

    registration:
      form:
         type: Application\Sonata\UserBundle\RegistrationType

routing.yml

       fos_user_register:
       resource: 
       "@FOSUserBundle/Resources/config/routing/registration.xml"
       prefix: /register

    #  sonata_user_register:
    # resource: 

   # 

 @SonataUserBundle/Resources/config/routing/sonata_registration_1.xml"

#前綴:/ register

完整配置

    fos_user:
             db_driver: orm # other valid values are 
             'mongodb', 'couchdb' and 'propel'
              firewall_name: secured_area
              registration:
              form:
              type: eventsBundle\Form\RegistrationType
              user_class: 
              Application\Sonata\UserBundle\Entity\User
              group:
              group_class: Application\Sonata\UserBundle\Entity\User
              #group_manager: sonata.user.orm.group_manager                    
              # If you're using doctrine orm (use 
              Sonata.user.mongodb.group_manager for mongodb)

              service:
              user_manager: sonata.user.orm.user_manager                      
              # If you're using doctrine orm (use 
              sonata.user.mongodb.user_manager for mongodb)

如果要簡單地做,則必須覆蓋FOS\\UserBundle的正確基本注冊表格,例如FOSUSerBundle官方文檔

namespace YourBundle\Form;

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

use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

use YourBundle\Entity\User;

class RegistrationType extends BaseType 
{
   public function __construct()
   {
      parent::__construct(User::class);
   }  
   public function buildForm(FormBuilderInterface $builder, array $options)
   {
      parent::buildForm($builder, $options);
      $builder->add('firstname')
              ->add('dateOfBirth');
   }
   public function getParent()
   {
       return 'FOS\UserBundle\Form\Type\RegistrationFormType';
       // Or for Symfony < 2.8
       // return 'fos_user_registration';
   }
   public function getBlockPrefix()
   {
       return 'app_user_registration';
   }
   // For Symfony 2.x
   public function getName()
   {
       return $this->getBlockPrefix();
   }
}

然后,您必須將表單類型配置為服務:

# app/config/services.yml
services:
    app.form.registration:
        class: YourBundle\Form\RegistrationType
        tags:
            - { name: form.type, alias: app_user_registration }

最后,您必須更新FOSUserBundle的配置:

# app/config/config.yml
fos_user:
    # ...
    registration:
        form:
            type: YourBundle\Form\RegistrationType
            # if you are using Symfony < 2.8 you should use the type name instead
            # type: app_user_registration

希望這會幫助您...

上面沒有任何內容對我有效。 我升級到了Symfony 3.4,現在可以使用了!! 完全遵循標准指南https://symfony.com/doc/master/bundles/FOSUserBundle/overriding_forms.html確實需要升級,可能是自動裝配功能有所幫助。

試試看:

配置文件

registration:
    form:
        type: eventsBundle\Form\RegistrationType

service.yml

app.form.registration:
    class: eventsBundle\Form\RegistrationType
    tags:
        - { name: form.type, alias: app_user_registration }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM