2016-04-07 3 views
0

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.

Répondre

1

Vous devez placer ceci dans votre contrôleur.

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

ou à l'intérieur AppController sans parent::initialize();

+0

merci. cela a bien fonctionné. – user1077915