Как мне создать кнопку выхода из системы в строке меню, отображаемой помощником вида?

В моем модуле есть панель subnav, созданная из частичного представления с помощью помощника.

Вот конфиг в module.config.php:

'navigation' => array(
    'default' => array(
        array(
            'label' => 'Create',
            'route' => 'mymodule\Create',
        ),
        array(
            'label' => 'View',
            'route' => 'mymodule\view',
        ),
        array(
            'label' => 'Search',
            'route' => 'mymodule\search',
        ),
        array(
            'label' => 'Log Off',
            'route' => 'mymodule\logoff',
        ),
    ),
),

);

Итак, вот моя проблема: я не просто хочу перенаправить пользователя на страницу входа в систему, я хочу очистить его сеанс и ТОГДА перенаправить его на страницу входа. Я также не хочу, чтобы страница входа в систему просто очищала сеанс всякий раз, когда пользователь переходит на него (в случае, если он вошел в систему и случайно нажал кнопку "Назад").

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

2 ответа

Решение

Почему бы просто не нацелить кнопку logoutAction?

я использую BjyAuthorise а также ZfcUser модули, но процесс очистки сеанса и перенаправления одинаков.

LoginController

public function logoutAction()
{
    $this->authService->logout();

    $redirect = $this->params('redirect', false);

    if ($redirect) {
        return $this->redirect()->toUrl($redirect);
    }

    return $this->redirect()->toRoute(
        $this->config->getLogoutRedirectRoute()
    );
}

AuthService

public function logout()
{
    $adapter = $this->authService->getAdapter();

    $adapter->resetAdapters();
    $adapter->logoutAdapters();

    $this->authService->clearIdentity();
}

Как говорит Алекс, это способ сделать это.

Этот код правильный

    array(
        'label' => 'Log Off',
        'route' => 'mymodule\logoff',
    ),

Итак, вам нужно установить действие выхода из системы по маршруту "mymodule\logoff", очистить сеанс и перенаправить пользователя на вход в систему или на дом или что вы хотите.

При входе в систему вам не нужно очищать сессию.

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