PUGXMultiUserBundle: неопределенный метод setEnabled() в FOS\UserBundle\Controller\RegistrationController

Я пытаюсь включить многопользовательский пакет в проект и получить

Ошибка: вызов неопределенного метода Vol\VolBundle\Entity\Staff::setEnabled() в G:\Documents\workspace\ волонтер \vendor\friendsofsymfony\user-bundle\FOS\UserBundle\Controller\RegistrationController.php строка 44

FOSUserBundle, по-видимому, работал правильно перед добавлением многопользовательского пакета. По крайней мере, часть соответствующего кода:

Пользовательский объект (с именем Person)

namespace Vol\VolBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Vol\VolBundle\Validator\Constraints as V2Assert;
use FOS\UserBundle\Model\User as BaseUser;

/**
 * Person
 *
 * @ORM\Table(name="person")
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({"staff" = "Staff", "volunteer" = "Volunteer"})
 */
Abstract class Person extends BaseUser
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;
...
}

Штатное лицо:

namespace Vol\VolBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use PUGX\MultiUserBundle\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Staff
 *
 * @ORM\Table(name="staff")
 * @ORM\Entity(repositoryClass="Vol\VolBundle\Entity\StaffRepository")
 * @UniqueEntity(fields = "username", targetClass = "Vol\VolBundle\Entity\Person", message="fos_user.username.already_used")
 * @UniqueEntity(fields = "email", targetClass = "Vol\VolBundle\Entity\Person", message="fos_user.email.already_used")
 */
class Staff
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;
...
}

config.yml

fos_user:
    db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
    firewall_name: main
    user_class: Vol\VolBundle\Entity\Person
#    registration:
#        form:
#            type: vol_user_registration
    service:
        user_manager: pugx_user_manager

pugx_multi_user:
  users:
    staff:
        entity: 
          class: Vol\VolBundle\Entity\Staff
#          factory: 
        registration:
          form: 
            type: Vol\VolBundle\Form\RegistrationStaffFormType
            name: fos_user_registration_form
            validation_groups:  [Registration, Default]
          template: VolVolBundle:Registration:staff.form.html.twig
        profile:
          form:
            type: Vol\VolBundle\Form\ProfileStaffFormType
            name: fos_user_profile_form
            validation_groups:  [Profile, Default] 
    volunteer:
        entity: 
          class: Vol\VolBundle\Entity\Volunteer
        registration:
          form: 
            type: Vol\VolBundle\Form\RegistrationVolunteerFormType
          template: VolVolBundle:Registration:volunteer.form.html.twig
        profile:
          form: 
            type: Vol\VolBundle\Form\ProfileVolunteerFormType

routing.yml:

fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

fos_user_profile:
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
    prefix: /profile

#rem'd for PUGX multi-user bundle
#fos_user_register:
#    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
#    prefix: /register

fos_user_resetting:
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
    prefix: /resetting

fos_user_change_password:
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
    prefix: /profile

##add following for PUGX multi-user bundle
staff_registration:
    pattern:  /register/staff
    defaults: { _controller: VolVolBundle:RegistrationStaff:register }

volunteer_registration:
    pattern:  /register/volunteer
    defaults: { _controller: VolVolBundle:RegistrationVolunteer:register }

1 ответ

Решение

Ошибка выдается из https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/RegistrationController.php. Итак, давайте посмотрим внутрь, в строке 44:

class RegistrationController extends ContainerAware
{
    public function registerAction(Request $request)
    {
        $user->setEnabled(true); // Line 44
}

Пытается позвонить setEnabled функция, которая должна быть определена в Staff учебный класс. Итак, вам просто нужно сделать Staff класс расширяется BaseUser как вы сделали с Person учебный класс.

Штатное лицо:

use FOS\UserBundle\Model\User as BaseUser;
class Staff extends BaseUser{

}

Это должно работать нормально.

Другие вопросы по тегам