加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

symfony – FOSUser Bundle ..重写表单类型时无法加载类型“X”

发布时间:2020-12-14 23:21:38 所属栏目:资源 来源:网络整理
导读:我以为我非常仔细地遵循了文档,但由于某种原因,我收到此错误消息.. 无法加载“sam_user_registration”类型 // src / Sam / Bundle / UserBundle / Entity / User.php namespace SamBundleUserBundleEntity;use DoctrineORMMapping as ORM;use FOSUser
我以为我非常仔细地遵循了文档,但由于某种原因,我收到此错误消息..

无法加载“sam_user_registration”类型

// src / Sam / Bundle / UserBundle / Entity / User.php

namespace SamBundleUserBundleEntity;

use DoctrineORMMapping as ORM;
use FOSUserBundleEntityUser as BaseUser;
use SymfonyComponentValidatorConstraints as Assert;

/**
 * @ORMEntity
 * @ORMTable(name="sam_user")
 */
class User extends BaseUser
{
/**
 * @var string $id
 *
 * @ORMId
 * @ORMColumn(name="id",type="integer")
 * @ORMGeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * Get id
 *
 * @return string $id
 */
public function getId()
{
    return $this->id;
}

/**
 * @ORMColumn(type="string",length=255)
 *
 * @AssertNotBlank(message="Please enter your name.",groups={"Registration","Profile"})
 * @AssertMinLength(limit="3",message="The name is too short.","Profile"})
 * @AssertMaxLength(limit="255",message="The name is too long.","Profile"})
 */
protected $name;

// src / Sam / Bundle / UserBundle / Form / Type / RegistrationFormType.php

<?php

namespace SamBundleUserBundleFormType;

use SymfonyComponentFormFormBuilderInterface;
use FOSUserBundleFormTypeRegistrationFormType as BaseType;

class RegistrationFormType extends BaseType
{
public function buildForm(FormBuilderInterface $builder,array $options)
{
    parent::buildForm($builder,$options);

    // add your custom field
    $builder->add('name');
}

public function getName()
{
    return 'sam_user_registration';
}
}

** src / Sam / Bundle / UserBundle / Resources / config / services.xml **

<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

<service id="sam_user.registration.form.type" class="SamBundleUserBundleFormTypeRegistrationFormType">
        <tag name="form.type" alias="sam_user_registration" />
        <argument>%fos_user.model.user.class%</argument>
    </service>

</container>

#app / config / config.yml

fos_user:
db_driver: orm # other valid values are 'mongodb','couchdb' and 'propel'
firewall_name: main
#user_class: SamBundleUserBundleDocumentUser
user_class: SamBundleUserBundleEntityUser

group:
    group_class:  SamBundleUserBundleEntityGroup

profile:  # Authentication Form
    form:
        type:               fos_user_profile
        name:               fos_user_profile_form
        validation_groups:  [Authentication] 

registration:
        form:
            type:               sam_user_registration

解决方法

首先,您的用户类缺少其构造函数.由于您继承了BaseUser,因此您也必须调用父构造函数.所以…
public function __construct()
{
    parent::__construct();

    //your code

}

其次,您不需要覆盖表单类型.由于您已将名称字段添加到您的实体,因此它将自动通过您的表单提供

{{ form_widget(myForm.name)} }

-> FosUserBundle Doc

但是,您确定在config.yml中导入了services.xml吗?为什么要混合使用xml和yml?坚持一个.

imports:
    - { resource: @SamBundleUserBundle/Resources/config/services.yml }

在评论中,Patt指出了我们的overriding registration FOSUserBundle Symfony2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读