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 doctrine:schema:update --force を実行すると、My 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';
}
}
私のservices.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 }
config.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');
}
}