Добавить роль в регистрации формы zfcuser

Я использую zfcuser, bjyauthorize et roleuserbridge. Я хочу добавить поле в форме регистрации. Я следовал за этим учебным шагом: http://resoftsol.com/adding-custom-fields-to-zfcuser-register-form/

в передней части модуля я добавил: - объект каталога с файлами user и userinterface:

namespace Front\Entity;

interface UserInterface
{
/**
 * Get id.
 *
 * @return int
 */
public function getId();

/**
 * Set id.
 *
 * @param int $id
 * @return UserInterface
 */
public function setId($id);

/**
 * Get username.
 *
 * @return string
 */
public function getUsername();

/**
 * Set username.
 *
 * @param string $username
 * @return UserInterface
 */
public function setUsername($username);

/**
 * Get email.
 *
 * @return string
 */
public function getEmail();

/**
 * Set email.
 *
 * @param string $email
 * @return UserInterface
 */
public function setEmail($email);

/**
 * Get displayName.
 *
 * @return string
 */
public function getDisplayName();

/**
 * Set displayName.
 *
 * @param string $displayName
 * @return UserInterface
 */
public function setDisplayName($displayName);

/**
 * Get password.
 *
 * @return string password
 */
public function getPassword();

/**
 * Set password.
 *
 * @param string $password
 * @return UserInterface
 */
public function setPassword($password);

/**
 * Get state.
 *
 * @return int
 */
public function getState();

/**
 * Set state.
 *
 * @param int $state
 * @return UserInterface
 */
public function setState($state);

/**
 * Get role.
 *
 * @return string
 */
public function getRole();

/**
 * Set role.
 *
 * @param string $role
 * @return UserInterface
 */
public function setRole($role);

}

++++++++++++++++++++

namespace Font\Entity;

class User implements UserInterface 
{
/**
 * @var int
 */
protected $id;

/**
 * @var string
 */
protected $username;

/**
 * @var string
 */
protected $email;

/**
 * @var string
 */
protected $displayName;

/**
 * @var string
 */
protected $password;

/**
 * @var int
 */
protected $state;


/**
 * @var string
 */
protected $role;

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

/**
 * Set id.
 *
 * @param int $id
 * @return UserInterface
 */
public function setId($id)
{
    $this->id = (int) $id;
    return $this;
}

/**
 * Get username.
 *
 * @return string
 */
public function getUsername()
{
    return $this->username;
}

/**
 * Set username.
 *
 * @param string $username
 * @return UserInterface
 */
public function setUsername($username)
{
    $this->username = $username;
    return $this;
}

/**
 * Get email.
 *
 * @return string
 */
public function getEmail()
{
    return $this->email;
}

/**
 * Set email.
 *
 * @param string $email
 * @return UserInterface
 */
public function setEmail($email)
{
    $this->email = $email;
    return $this;
}

/**
 * Get displayName.
 *
 * @return string
 */
public function getDisplayName()
{
    return $this->displayName;
}

/**
 * Set displayName.
 *
 * @param string $displayName
 * @return UserInterface
 */
public function setDisplayName($displayName)
{
    $this->displayName = $displayName;
    return $this;
}

/**
 * Get password.
 *
 * @return string
 */
public function getPassword()
{
    return $this->password;
}

/**
 * Set password.
 *
 * @param string $password
 * @return UserInterface
 */
public function setPassword($password)
{
    $this->password = $password;
    return $this;
}

/**
 * Get state.
 *
 * @return int
 */
public function getState()
{
    return $this->state;
}

/**
 * Set state.
 *
 * @param int $state
 * @return UserInterface
 */
public function setState($state)
{
    $this->state = $state;
    return $this;
}


/**
 * Get role.
 *
 * @return string
 */
public function getRole()
{
    return $this->role;
}

/**
 * Set role.
 *
 * @param string $role
 * @return UserInterface
 */
public function setRole($role)
{
    $this->role = $role;
    return $this;
   }

} ++++++++++++++++++++++++++ и я добавил каталог mapp. у меня была следующая ошибка:

Catchable fatal error: Argument 1 passed to ZfcUser\Validator\AbstractRecord::setMapper() 
must be an instance of ZfcUser\Mapper\UserInterface, instance of Front\Mapper\User given, 
called in C:\wamppp\www\projet\vendor\zendframework\zendframework\library\Zend\Validator
\AbstractValidator.php on line 139 and defined in C:\wamppp\www\projet\vendor\zf-commons
\zfc-user\src\ZfcUser\Validator\AbstractRecord.php on line 65

2 ответа

У меня была проблема, и я смог ее решить... наконец-то.

Скопируйте папку ZfcUser\Validator в ваш модуль. Адаптируйте пространство имен и измените ожидаемый тип объекта метода AbstractRecord::setMapper для вашего пользовательского объекта / интерфейса, что бы у вас там ни было.

Кроме того, в предоставленном вами коде пространства имен не идентичны. Yout получил "Front" и "Font" там.

Редактировать: забыл важную часть XD

После того, как вы это сделали, вам потребуется следующий код в файле конфигурации (мой модуль называется User):

'zfcuser_register_form' => function ($sm) {
                    $options = $sm->get('zfcuser_module_options');
                    $form = new ZfcUser\Form\Register(null, $options);
                    //$form->setCaptchaElement($sm->get('zfcuser_captcha_element'));
                    $form->setInputFilter(new ZfcUser\Form\RegisterFilter(
                        new User\Validator\NoRecordExists(array(
                            'mapper' => $sm->get('zfcuser_user_mapper'),
                            'key'    => 'email'
                        )),
                        new User\Validator\NoRecordExists(array(
                            'mapper' => $sm->get('zfcuser_user_mapper'),
                            'key'    => 'username'
                        )),
                        $options
                    ));
                    return $form;
                },

Надеюсь, это поможет.

Вы не должны создавать свой собственный интерфейс (и если вы это сделаете, ваш новый интерфейс должен расширять ZfcUser\Entity\UserInterface), вместо этого просто заставьте вашу пользовательскую сущность расширять ZfcUser\Entity\UserInterface.

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