Flash-сообщение в cakephp 3 не работает

Я новичок в торте, извините, если это простая проблема.

Когда я закончу сохранять данные и попытаюсь показать сообщение с информацией о том, сохранен ли пользователь или не может быть сохранен, покажите мне следующую ошибку:

Ошибка: вызов функции-члена error() в необъектном файле C:\wamp\www\proyecto\src\Controller\AdministradorsController.php Строка: 76

AdministradorsController расширяет AppController

public function add()
{
    $administrador = $this->Administradors->newEntity();
    if ($this->request->is('post')) {

        $this->loadModel('Personas');
        $persona = $this->Personas->newEntity();
        $persona->rut = $this->request->data['Personas']['rut'];
        $persona->sexo = $this->request->data['Personas']['sexo'];
        $persona->nombre = $this->request->data['Personas']['nombre'];
        $persona->apellido_paterno = $this->request->data['Personas']['apellido_paterno'];
        $persona->apellido_materno = $this->request->data['Personas']['apellido_materno'];
        $persona->direccion = $this->request->data['Personas']['direccion'];
        $persona->telefono_fijo = $this->request->data['Personas']['telefono_fijo'];
        $persona->telefono_movil = $this->request->data['Personas']['telefono_movil'];
        $persona->fecha_nacimiento = $this->request->data['Personas']['fecha_nacimiento'];
        $persona->email = $this->request->data['Personas']['email'];
        $persona->comuna_id = $this->request->data['Personas']['comuna_id'];

        if(!$this->Personas->save($persona)){

             $this->Flash->error('The administrador could not be saved. Please, try again.');
        }



        $administrador = $this->Administradors->newEntity();

        $administrador->persona_id = $persona->id;

        if(!$this->Administradors->save($administrador)){

              $this->Flash->error('The administrador could not be saved. Please, try again.');
        }

        $this->loadModel('Users');
        $user = $this->Users->newEntity();
        $user->username = $persona->email;
        $user->password = $this->rand_passwd(6);
        $user->estado = true;
        $user->persona_id = $persona->id;
        $user->role_id = ADMIN;

        if($this->Users->save($user)){

             $this->Flash->success('The administrador has been saved.');

             return $this->redirect(['action' => 'index']);

        }else{
             $this->Flash->error('The administrador could not be saved. Please, try again.');
        }

    }
    $personas = $this->Administradors->Personas->find('list', ['limit' => 200]);
    $this->set(compact('administrador', 'personas'));
    $this->set('_serialize', ['administrador']);

    $this->loadModel('Regions');
    $comunas = $this->Regions->Comunas->find('list', ['limit' => 200]);
    $this->set(compact('comuna', 'comunas'));
    $this->set('_serialize', ['comuna']);
}

Данные вставляются в базу данных, но сообщение Flash выдает мне ошибку, извините за мой плохой английский и спасибо


person eLeonZ    schedule 12.04.2015    source источник
comment
кажется, вы не загружаете компонент Flash. В AppController.php в методе initialize() введите $this->loadComponent('Flash');   -  person AKKAweb    schedule 13.04.2015
comment
Еще раз спасибо, Андре, но в «AppController.php» у меня есть «loadComponent('Flash')», но я снова использую «loadComponent('Flash')» в AdministradorsController в методе «initialize()», и на этот раз работаю с Flash Сообщение. Я не знаю, что я сделал для этого.   -  person eLeonZ    schedule 13.04.2015
comment
Эдгар, повторная загрузка компонента Flash в другой контроллер не должна быть проблемой. Вы расширяете AppController как таковой: class AdministradorsController extends AppController. Другая проблема, которая также может вызвать проблему, заключается в том, что вы определяете initialize() в своем AdministratorController, но не вызываете parent::initialize().   -  person AKKAweb    schedule 13.04.2015
comment
Да, я не вызываю parent::initialize() , спасибо.   -  person eLeonZ    schedule 13.04.2015


Ответы (3)


Если вы загружаете компонент Flash в свой AppController, проблема может заключаться в том, что у вас есть метод initialize() в вашем AdministratorsController, и вы не вызываете parent::initialize(); в этом методе. Это необходимо для его работы, поэтому все helpers, components и т. д., которые инициализируются в методе AppControllers initialize(), переносятся.

person AKKAweb    schedule 12.04.2015

Визуализация Flash-сообщений в cakephp 3

В контроллере:

<?php
    $this->Flash->error(__('Your error message'), ['key' => 'error']);
?>

В поле зрения:

<?= $this->Flash->render('error'); ?>

В src/Template/Element/Flash/success.ctp измените класс div на class="alert alert-success" т.е.

<?php
    if (!isset($params['escape']) || $params['escape'] !== false) {
        $message = h($message);
    }
?>
<div class="alert alert-success" onclick="this.classList.add('hidden')"><?= $message ?></div>

Примените тот же класс к src/Template/Element/Flash/error.ctp

person Vivek Ranjan    schedule 23.06.2017

для облегчения работы с Flash-сообщениями можно использовать простой плагин уведомлений turbo-tribble.

person D.Dimitrioglo    schedule 04.10.2015