J'ai écrit un composant (isPilotFree) qui effectue des vérifications.CAKEPHP 3 - Composant Flash non reconnu après utilisation à l'intérieur du composant
<?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);
}
}
?>
Ce composant est appelé à l'intérieur comme un contrôleur:
if($this->Shared->pilotIsFree($booking, [ 'Bookings.requester_pk =' => $booking->requester_pk ]) )
{
... ... ..
}
Le composant est chargé dans le contrôleur comme:
/**
* Initialization method
*
* @return none
*/
public function initialize()
{
$this->loadComponent('Shared');
}
La question que je vais avoir est maintenant l'appel Flash à l'intérieur du composant fonctionne bien, mais quand j'essaie de déclencher un message flash à l'intérieur du contrôleur, j'ai cette erreur:
Erreur: Appel à un succès de fonction membre() sur booléen fichier .../src/contrôleur/BookingsController.php ligne: 191
La seule manière que je trouvais pour le faire fonctionner bien est d'ajouter au début du contrôleur ceci:
public $ components = ['Flash'];
Il n'est pas supposé que le composant flash doit être chargé dans la classe parent AppController. En fait, si je ne charge pas/n'utilise pas mon composant personnalisé, je peux déclencher des messages Flash depuis l'intérieur du contrôleur sans ajouter la ligne précédente.
Ai-je raté quelque chose?
Merci. Cordialement. Facundo.
merci. cela a bien fonctionné. – user1077915