Как получить доступ к формам zfcuser zf2?

Здравствуйте , работаю над проектом на zf2+doctrine. Для авторизации использую модуль zfcuser, для разделения прав доступа(ACL) bjyauthorize.
Создаю кастомную форму для изменения пароля:
<?php
namespace Application\Form;

use Zend\Form\Form;

class ClientpassForm extends Form{

    public function __construct($em){

        parent::__construct('security');

        $this->add(array(
                'name' => 'password-old',
                'attributes' => array(
                    'type' => 'password',
                    'placeholder' => 'пароль',
                    'id' => 'key',
                    'class' => ''
                ),
                'options' => array(
                    'label' => 'Введите ваш старый пароль',
                    'label_attributes' => array(
                        'class' => ''
                    ),
                ),
            ));

        $this->add(array(
                'name' => 'password',
                'attributes' => array(
                    'type' => 'password',
                    'placeholder' => 'новый пароль',
                    'id' => 'key',
                    'class' => ''
                ),
                'options' => array(
                    'label' => 'Введите новый пароль',
                    'label_attribute' => array(
                        'class' => ''
                    ),
                ),
            ));
        $this->add(array(
                'name' => 'password-confirm',
                'attributes' => array(
                    'type' => 'password',
                    'placeholder' => 'новый пароль',
                    'id' => 'key',
                    'class' => ''
                ),
                'options' => array(
                    'label' => 'Повторите новый пароль',
                    'label_attributes' => array(
                        'class' => ''
                    ),
                ),
            ));
    }
}

и фильтр к форме:
<?php
namespace Application\Form;

use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;

class ClientpassFilter extends InputFilter{

    public function __construct($sm){

        $this->add(array(
            'name' => 'password',
            'filters' => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
            'validators' => array(
                array(
                    'name' => 'StringLength',
                    'options' => array(
                        'encoding' => 'UTF-8',
                        'min' => 4,
                        'max' => 100,
                    ),
                ),
            ),
        ));

        $this->add(array(
            'name' => 'password-old',
            'filters' => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
            'validators' => array(
                array(
                    'name' => 'StringLength',
                    'options' => array(
                        'encoding' => 'UTF-8',
                        'min' => 4,
                        'max' => 100,
                    ),
                ),
            ),
        ));

        $this->add(array(
            'name' => 'password-confirm',
            'filters' => array(
                array('name' => 'StripTags'),
                array('name' => 'StringTrim'),
            ),
            'validators' => array(
                array(
                    'name' => 'StringLength',
                    'options' => array(
                        'encoding' => 'UTF-8',
                        'min' => 4,
                        'max' => 100,
                    ),
                ),
                array(
                    'name' => 'Identical',
                    'options' => array(
                        'token' => 'password',
                        'messages' => array(
                            \Zend\Validator\Identical::NOT_SAME => 'Введенные пароли не совпадают'
                        ),
                    ),
                ),
            ),
        ));
    }
}

Контроллер(action изменения пароля):
public function securityAction(){
        $this->getServiceLocator()->get('Zend\View\Renderer\PhpRenderer')->headTitle('Изменение данных пользователя');
        $em = $this->getEntityManager();

        $form = new \Application\Form\ClientpassForm($em);
return new ViewModel(array(
                'form' => $form,
            ));
    }

И напоследок view:
<?=$this->form()->openTag($form);?>
<?=$this->formRow($form->get('password-old'));?>
<br/>
<?=$this->formRow($form->get('password'));?>
<br/>
<?=$this->formRow($form->get('password-confirm'));?>
<br/>
<button type="submit">Сохранить</button>
<?=$this->form()->closeTag();?>

Не могу связать форму с модулем.
Можно было бы обойти модуль zfcuser просто сверив старый пароль формы с базой, но используется Zend\Crypt\Password\Bcrypt для шифрования пароля и каждый раз при шифровании соответственно разная выходная строка. Изменить метод шифрования нельзя, уже есть пользователи.

Форма регистрации работает редиректом(auth action):
if ($request->isPost())
            return $this->forward()->dispatch('zfcuser', array('action' => 'authenticate'));

С формой изменения пароля такой трюк не проходит.
Есть какие-либо варианты решения данной проблемы? Спасибо, что дочитали до конца.
  • Вопрос задан
  • 2488 просмотров
Решения вопроса 1
@boozzd Автор вопроса
Нашел решение. Можно просто в своем модуле переопределить view для нужных action. Вот нашел пример: https://github.com/codeforest/zend-framework-2-tut...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы