Расширение & amp; переопределение поведения ZfcUser

Я использую ZfcUser с ht-user-registration и scn-social-auth, и есть два довольно незначительных улучшения, которые я хочу добиться, чтобы расширить мою реализацию, но пока у меня нет большого успеха:

  1. ht-user-registration отправляет новым пользователям электронное письмо после регистрации и отказывает им в доступе, пока они не активируют свою учетную запись, это работает нормально. Чтобы расширить это, я бы хотел перенаправить пользователя после регистрации, чтобы он отправлялся на страницу с указанием проверить свою электронную почту, а не на страницу входа в систему, что является стандартным поведением ZfcUser. Я попытался добавить прослушиватель событий в модуль начальной загрузки, который выглядит следующим образом:

    $response = $e->getResponse();
    // indicate that we intend to redirect after register action
    // set the redirection location to the home page
    $response->getHeaders()->addHeaderLine('Location', 'home');
    $response->setStatusCode(302);
    $response->sendHeaders();
    
    $em = \Zend\EventManager\StaticEventManager::getInstance();
    $em->attach('ZfcUser\Service\User', 'register', function($event) use ($response) {
    // don't allow anything else to process this event
    $event->stopPropagation();
    // return the redirect response
    return $response;
    });
    

    Это вызывается правильно, но перенаправление никогда не происходит, и пользователь по-прежнему попадает на страницу входа. Есть ли что-то еще, что мне нужно сделать, чтобы выполнить перенаправление? Или, может быть, есть лучший способ полностью достичь этого?

  2. Я хотел бы добавить переменные макета, чтобы я мог изменять заголовки страниц и навигацию в своем шаблоне макета для страниц ZfcUser. Для этого я сделал переопределение UserController из ZfcUser следующим образом:

    class UserController extends \ZfcUser\Controller\UserController
    {
    public function loginAction()
    {
    $this->layout()->setVariables(array(
    'view_title'         => 'Reports Login',
    ));
    return parent::loginAction();
    }
    }
    

    А затем переопределить invokable для zfcuser в конфиге следующим образом:

    'controllers' => array(
    'invokables' => array(
    'Application\Controller\Index'  => 'Application\Controller\IndexController',
    'zfcuser'                       => 'Application\Controller\UserController',
    ),
    

    ),

    Фреймворк пытается создать экземпляр моего UserController в нужной точке, но терпит неудачу с InvalidArgumentException: «Вы должны предоставить вызываемый redirectCallback», который, как я вижу, необходим для создания базового контроллера, но не передается моей переопределенной версии — любые подсказки, почему не? Я не могу найти работающий пример этого, чтобы помочь.

    Может быть, есть гораздо более простой способ внедрить переменные макета в действия контроллера другого модуля?

    [РЕДАКТИРОВАТЬ] Я нашел простой, но не очень элегантный способ сделать это. Так как мой модуль переопределяет представления как для входа в систему, так и для регистрации, можно установить переменные макета в представлении, поэтому я смог добавить один вкладыш в верхнюю часть каждого представления для установки переменной макета, например:

    <?php $this->layout()->setVariable('view_title', 'Register for an account'); ?>
    

    Это не правильно, но работает. Если есть лучшее решение, которое я хотел бы знать.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]