5

ドキュメントに非常に厳密に従っていると思いましたが、何らかの理由で、このエラーメッセージが表示されます。

タイプ「sam_user_registration」を読み込めませんでした

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

namespace Sam\Bundle\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Entity\User as BaseUser;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * @ORM\Table(name="sam_user")
 */
class User extends BaseUser
{
/**
 * @var string $id
 *
 * @ORM\Id
 * @ORM\Column(name="id", type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

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

/**
 * @ORM\Column(type="string", length=255)
 *
 * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"})
 * @Assert\MinLength(limit="3", message="The name is too short.", groups={"Registration", "Profile"})
 * @Assert\MaxLength(limit="255", message="The name is too long.", groups={"Registration", "Profile"})
 */
protected $name;

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

<?php

namespace Sam\Bundle\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);

    // 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="Sam\Bundle\UserBundle\Form\Type\RegistrationFormType">
        <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: Sam\Bundle\UserBundle\Document\User
user_class: Sam\Bundle\UserBundle\Entity\User

group:
    group_class:  Sam\Bundle\UserBundle\Entity\Group

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

registration:
        form:
            type:               sam_user_registration
4

1 に答える 1

3

まず、ユーザークラスにコンストラクターがありません。BaseUserを継承するため、親コンストラクターも呼び出す必要があります。それで...

public function __construct()
{
    parent::__construct();

    //your code

}

次に、フォームタイプを上書きする必要はありません。エンティティに名前フィールドを追加したので、フォームから自動的に利用できるようになります。

{{ form_widget(myForm.name)} }

-> FosUserBundle Doc

ただし、 config.ymlにservices.xmlをインポートしたことを確認し、xmlとymlを混在させているのはなぜですか?1つに固執するだけです。

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

そしてコメントの中で、Pattは私たちのオーバーライド登録FOSUserBundleSymfony2を指摘しました

于 2013-01-27T09:07:50.473 に答える