我想扩展或替换SonataUserBundle中的注册类型表单。目前,我拥有使用“easy-extend”命令扩展的sonata用户包。因此,我创建了一个目录"src/Application/Sonata/UserBundle/"
。Symfony2 - 扩展或替换SonataUserBundle注册表
我的印象是,如果我在"src/Application/Sonata/UserBundle/Form/Type/RegistrationFormType"
中创建了另一个文件"RegistrationFormType.php"
,则表单将是加载的文件,而不是供应商文件夹中的文件。
例如,我可以通过简单地在我的应用程序文件夹中创建一个具有相同名称的文件和类来替换vendor文件夹中的文件,从而轻松覆盖registrationController。另外,我可以做同样的事情来成功替换一些树枝模板。但是,它不适合的形式工作...
表单类型如下:
<?php
/*
* This file is part of the FOSUserBundle package.
*
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Sonata\UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class RegistrationFormType extends AbstractType
{
private $class;
/**
* @var array
*/
protected $mergeOptions;
/**
* @param string $class The User class name
* @param array $mergeOptions Add options to elements
*/
public function __construct($class, array $mergeOptions = array())
{
$this->class = $class;
$this->mergeOptions = $mergeOptions;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email', 'email', array_merge(array(
'label' => 'form.email',
'translation_domain' => 'SonataUserBundle',
), $this->mergeOptions))
->add('plainPassword', 'repeated', array_merge(array(
'type' => 'password',
'options' => array('translation_domain' => 'SonataUserBundle'),
'first_options' => array_merge(array(
'label' => 'form.password',
), $this->mergeOptions),
'second_options' => array_merge(array(
'label' => 'form.password_confirmation',
), $this->mergeOptions),
'invalid_message' => 'fos_user.password.mismatch',
), $this->mergeOptions))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => $this->class,
'intention' => 'registration',
));
}
public function getName()
{
return 'sonata_user_registration';
}
}
基本上,我复制和粘贴"vendor/sonata/user-bundle/form/type/registrationFormType.php"
的文件,但我删除了用户名字段,正好看到哪个表单被加载。但是,当我访问/注册时,我仍然得到用户名字段,这意味着加载的表单不是我想要的。
那么,如何重载或替换表格,以便我可以添加字段"firstName, lastName, dateOfBirth, etc.."
,以便用户可以在注册过程中自行输入它们。
编辑1:配置添加
sonata_user:
security_acl: false
manager_type: orm # Can be orm for mongodb
table:
user_group: "my_custom_user_group_association_table_name"
impersonating:
route: page_slug
parameters: { path:/}
class: # Entity Classes
user: Application\Sonata\UserBundle\Entity\User
group: Application\Sonata\UserBundle\Entity\Group
admin: # Admin Classes
user:
class: Sonata\UserBundle\Admin\Entity\UserAdmin
controller: SonataAdminBundle:CRUD
translation: SonataUserBundle
group:
class: Sonata\UserBundle\Admin\Entity\GroupAdmin
controller: SonataAdminBundle:CRUD
translation: SonataUserBundle
profile: # Profile Form (firstname, lastname, etc ...)
form:
type: sonata_user_profile
handler: sonata.user.profile.form.handler.default
name: sonata_user_profile_form
validation_groups: [Profile]
register:
form:
type: osc_user_registration
handler: sonata.user.profile.form.handler.default
name: osc_user_registration_form
validation_groups: [SonataUser]
sonata_admin:
templates:
dashboard: SonataAdminBundle:Core:dashboard.html.twig
您可以发布您的奏鸣曲捆绑配置,sonataBundle版本您正在使用 ?如果你可以创建git repo,在新的symfony项目中整合奏鸣曲包来重现它,情况会更好。 – vishal
我添加了配置! – CoachNono