CAKEPHP 3 — Flash-компонент не распознается после использования внутри компонента

Я написал компонент (isPilotFree), который делает некоторые проверки.

<?php

namespace App\Controller\Component;

use Cake\Controller\Component;
use Cake\Controller\Controller;

class SharedComponent extends Component
{
public $components = [ 'Flash' ];

/** check any pilot overlap
*
* @param string|null booking record
* @return true / false
**/

public function pilotIsFree( $booking, $who )
{
$controller = $this->_registry->getController();

$Bookings = $controller->Bookings;

$res = true;

if( $booking->id == null )
$booking_id = -1;
else
$booking_id = $booking->id;

if( $res )
{
$bookings =  $Bookings->find( 'all' )->Where( [ 'provider_pk != ' =>  $booking->provider_pk, 'Bookings.id !=' => $booking_id, $who, 'start = ' => $booking->start ] );

$res = $bookings->count() == 0;
}

// deleted some lines for simplicity
... ... ...

if( !$res )
{
$this->Flash->error( __('The pilot is not available.') );
}

return( $res );
}

}
?>

Этот компонент вызывается из контроллера как:

        if( $this->Shared->pilotIsFree( $booking, [ 'Bookings.requester_pk =' => $booking->requester_pk ] )  )
{
... ... ..
}

Компонент загружается в контроллер как:

/**
* Initialization method
*
* @return none
*/
public function initialize()
{
$this->loadComponent( 'Shared' );
}

Проблема, с которой я столкнулся сейчас, заключается в том, что вызов Flash внутри компонента работает нормально, но когда я пытаюсь вызвать флэш-сообщение из контроллера, я получаю эту ошибку:

Ошибка: вызов функции-члена success () для логического значения
Файл … / src / Controller / BookingsController.php
Линия: 191

Единственный способ, как я нашел, чтобы он работал нормально, это добавить в начале контроллера это:

public $ components = [‘Flash’];

Не предполагается, что флэш-компонент загружается в родительский класс AppController. На самом деле, если я не загружаю / не использую свой пользовательский компонент, я могу запускать Flash-сообщения изнутри контроллера, не добавляя предыдущую строку.

Я что-то пропустил ?

Благодарю.
С уважением.
Факундо.

0

Решение

Вы должны поместить это в свой контроллер.

public function initialize()
{
parent::initialize();
$this->loadComponent('Flash');
}

Или внутри AppController без parent::initialize();

1

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

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

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