Я бы хотел избавиться от сообщений об ошибках компонента Auth, особенно от сообщения authError , которое появляется при попытке доступа к недопустимому действию.
Просто чтобы быть уверенным, я дважды проверяю, что в макете нет ни одного вызова $this->Session->flash()
. Кроме того, установка пустого значения не работает, так как компонент имеет значение сообщения по умолчанию.
Я использую компонент Auth со следующей конфигурацией в классе AppController:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'userModel' => 'WebUser',
'loginAction' => '/login',
'loginRedirect' => '/',
'logoutRedirect' => '/login',
'autoRedirect' => false,
),
'Session',
...
...
}
Для входа в систему и выхода из системы перенаправления Я настроил два маршрута:
Router::connect('/', array('controller' => 'posts', 'action' => 'index'));
Router::connect('/login', array('controller' => 'web_users', 'action' => 'login'));
Действие login в WebUser контроллер почти пуст; Я изменяю только макет по умолчанию:
function login() {
$this->layout = 'login';
$this->set('title_for_layout', 'Sign in');
}
Наконец, у меня есть очень простой login.ctp файл макета:
<html>
<head>
...
</head>
<body>
...
<?php echo $content_for_layout; ?>
...
</body>
</html>
Когда я получаю доступ к http://example.com/login
, нет проблем, нет сообщений, только форма входа в систему. Однако я получаю сообщение по умолчанию authError при запросе любого другого действия, сразу после того, как компонент Auth перенаправляет на действие login . Возникают два вопроса:
- Почему компонент Auth отображает флэш-сообщения, когда нигде нет вызова
$this->Session->flash()
? (см. Обновление 2 ниже)
- Как настроить пустое / нулевое значение в атрибуте authError ?
Спасибо!
UPDATE
Я пришел к действительно ужасному решению: я создал элемент login_error.ctp и назначил атрибут flashElement при инициализации компонента Auth:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'flashElement' => 'login_error',
...
...
}
В login_error.ctp я просто сравниваю с authError сообщением по умолчанию:
<?php if ( $message !== 'You are not authorized to access that location.' ): ?>
<div id="flashMessage" class="message"><?php echo $message; ?></div>
<?php endif; ?>
Это работает, но я ненавижу это!
ОБНОВЛЕНИЕ 2
Благодаря ответу dogmatic69 я заставил себя снова все проверить. Наконец-то я нашел, куда звонили $this->Session->flash()
. Это был небольшой элемент зрения, который я написал раньше. Это не имело ничего общего с входом / выходом из системы, поэтому я не обращал на это внимание.
ОБНОВЛЕНИЕ 3
Благодаря SpawnCxy ответу также . Копирование компонента Auth и внесение пользовательских изменений - лучший подход, чем сравнение строк.