当我尝试覆盖 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');
}
}