0

当我尝试覆盖 SonataUserBundle 中的注册表单时,出现此错误:“无法加载类型“sonata_user_registration””。我搜索了此问题的解决方案,但其中任何一个都对我没有帮助。我成功覆盖了模板,但现在,我需要覆盖注册表单(添加年龄字段),所以我添加了一些代码

//app/Application/Sonata/UserBundle/Entity/User.php
  /**
     * @ORM\Column(type="string", length=255)
     *
     * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"})
     */
    protected $age;


        public function getAge()
    {
        return $this->age;
    }

        public function setAge($age)
    {
         $this->a=$age;
    }

但是如果我运行 php app/console dictionary:schema:update --force 它什么也没告诉我要更新我的 RegistrationFormType:

  //app/Application/Sonata/UserBundle/Form/Type/RegistrationFormType.php
namespace Application\Sonata\UserBundle\Form\Type;

use Symfony\Component\Form\FormBuilderInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;

class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);
        $builder->add('age');
    }

    public function getName()
    {
        return 'sonata_user_registration';
    }
        public function getParent()
    {
        return 'fos_user_registration';
    }

}

我的服务.yml:

//app/Application/Sonata/UserBundle/Resources/config/services.yml
services:
    sonata_user.registration.form.type:
    class: Application\Sonata\UserBundle\Form\Type\RegistrationFormType
    arguments: [ "%fos_user.model.user.class%"]
    tags:
        - { name: form.type, alias: sonata_user_registration }

配置.yml:

fos_user:
    user_class:     Application\Sonata\UserBundle\Entity\User
    group:
        group_class:   Application\Sonata\UserBundle\Entity\Group
        group_manager: sonata.user.orm.group_manager
    service:
        user_manager: sonata.user.orm.user_manager 
    registration:
        form:
            type: sonata_user_registration 
sonata_user:
    security_acl: true
    manager_type: orm 

和我在 //app/Application/Sonata/UserBundle/DependencyInjection 中的 DependencyInjection

namespace Application\Sonata\UserBundle\DependencyInjection;

use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;

class SonataUserExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
}
4

0 回答 0