Сессия - ›flash не показывает сообщение о сеансе в CakePHP

Я использую CakePHP 2.6.7 и скопировал код для отображения флэш-сообщений с одного контроллера на другой, но он не работает на втором контроллере.

В AdminsController:

   function login() {
        $this->loadModel('Admin');
        $this->layout = "admin-login";
        // if already logged in check this step
        if ($this->Auth->loggedIn()) {
            return $this->redirect('dashboard'); //(array('action' => 'deshboard'));
        }
        // after submit login form check this step
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                // pr($this->Auth); exit;
                if ($this->Auth->user('status') == 'active') {
                    // user is activated
                    $this->Admin->id = $this->Auth->user('id');
                    $this->Admin->saveField("loggedIn", 1);
                    return $this->redirect($this->Auth->redirectUrl());
                } else {
                    // user is not activated
                    // log the user out
                    $msg = '<div class="alert alert-error">
                           <button type="button" class="close" data-dismiss="alert">×</button>
                           <strong>You are blocked, Contact with Adminstrator</strong>
                        </div>';
                    $this->Session->setFlash($msg);
                    return $this->redirect($this->Auth->logout());
                }
            } else {
                $msg = '<div class="alert alert-error">
                           <button type="button" class="close" data-dismiss="alert">×</button>
                           <strong>Incorrect email/password combination. Try Again</strong>
                        </div>';
                $this->Session->setFlash($msg);
            }
        }
    }

В admins / login.ctp:

<?php echo $this->Session->flash(); ?>

Когда я ввожу неправильный адрес электронной почты или пароль, отображается сообщение об ошибке. доказательство: http://jegeachi.com/admins/login

Но ТАКАЯ задача не может быть выполнена в ResellersController. Вот код контроллера:

function login() {
    $this->layout = 'public-login';
    $this->loadModel('Reseller');
        // if already logged in check this step
    if ($this->Auth->loggedIn()) {
            return $this->redirect('profile'); //(array('action' => 'deshboard'));
        }
        // after submit login form check this step
        if ($this->request->is('post')) {

            if ($this->Auth->login()) {

                return $this->redirect($this->Auth->redirectUrl());
            } else {

                $msg = '<div class="alert alert-error">
                <button type="button" class="close" data-dismiss="alert">×</button>
                <strong>Incorrect email/password combination. Try Again</strong>
            </div>';
            $this->Session->setFlash($msg);

        }
    }
} 

в Реселлеры / login.ctp:

 <?php echo $this->Session->flash(); ?>

Если вход не удался из-за неправильного адреса электронной почты или пароля, он не отображается.

доказательство: http://jegeachi.com/resellers/login

Это странная и проводная проблема. Тот же код работает в контроллере, но не в другом. Любая идея?


person Abdus Sattar Bhuiyan    schedule 03.12.2015    source источник
comment
Я использую cakephp 2.6.7 и загружаю сеанс как в контроллере администратора, так и в контроллере посредников.   -  person Abdus Sattar Bhuiyan    schedule 03.12.2015


Ответы (2)


Убедитесь, что вы еще не используете флэш-сообщение сеанса. Это могло произойти, если в вашем app/View/Layouts/public-login.ctp макете есть что-то вроде:

<?php $this->Session->flash(); ?>

Или где-нибудь в ваших блоках просмотра / просмотра.


Проверяя вывод HTML, я обнаружил следующее вместо ожидаемого сообщения об ошибке:

    <div class="alert alert-danger display-hide">
        <button class="close" data-close="alert"></button>
        <span> Enter Email and password. </span>
    </div>

Проверьте свой обратный вызов beforeRender() и убедитесь, что вы не мигаете указанным выше сообщением. Если да, то он перезаписывает предыдущий.

person Inigo Flores    schedule 03.12.2015
comment
Я проверил, и странно: я загружаю все файлы на свой локальный компьютер. Сообщение сеанса отображается на моем локальном хосте. Это действительно расстраивает. - person Abdus Sattar Bhuiyan; 04.12.2015
comment
Все, что я получаю сейчас, - это пустая страница с «неправильным» сообщением. - person Inigo Flores; 04.12.2015
comment
Я просто попробовал с echo "неправильно"; выход; для тестирования. Теперь я редактирую свой код, как указано выше. Теперь вы не видите флеш-сообщения с неправильным паролем электронной почты. - person Abdus Sattar Bhuiyan; 04.12.2015

Здравствуйте, я думаю, вы забыли повторить свое сообщение сеанса, напишите, как показано ниже, в вашем файле ctp

echo $this->Session->flash(); 
person Tejas Khutale    schedule 03.12.2015