Bonjour à tous !

J'ai deux controller distinct, j'aimerais appelle une fonction private d'un controlleur dans un autre controller.

Problème, il ne prend pas en compte mon appelle.

Voici mon erreur :

SQL Error: 1064: You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near '__GetPoisId' at line 1 [APP\webroot\cake\libs\model\datasources\dbo_source.php, line 684]
Query: __GetPoisId

GetPoisId ==> Ma fonction private.

Apparament cakephp interprète cela comme une requête SQL et non un appelle de fonction.

Dois instancier un objet pour pouvoir appeler la fonction ?

Voici un exemple IDENTIQUE à ma structure.

class UtilisateursController extends AppController
{
    var $name = "Utilisateurs";
    $uses = ('Utilisateur','Message');
    function VoirMessageUtilisateur( $utilisateur_id )
    {
        $messages = $this->Message->GetMessageUtilisateur($utilisateur_id); //ICI J'APPELLE MA FONCTION PRIVATE.
    }

}

class MessagesController extends AppController
{
    var $name = "Messages";
    $uses = ('Message'};
    function GetMessageUtilisateur( $utilisateur_id )
    {
        return $this->Utilisateur->find('all',array('conditions' => array('Message.utilisateur_id' => $utilisateur_id )));
    }

}

4 réponses


Bonjour,

il manquerait pas un $ sur la 8eme ligne du 2eme controller ?

zaarkan
Auteur

heu oui en effet mais le problème ne vient pas de la.

Le code présent est à titre d'exemple.

Je veut tout simplement pouvoir appeler une fonction dans un autres controller sans passer par un requestAction.

Exemple: le find :)

met la function dans le model message et pas dans le controller

class Message extends AppModel
{  
    var $name = "Message"; 
    var $belongsTo = 'Utilisateur';
    function GetMessageUtilisateur( $utilisateur_id )  
    {  
        return $this->Utilisateur->find('all',array('conditions' => array('Message.utilisateur_id' => $utilisateur_id )));  
    }  

}

Load ton model Utilisateur dans ton controller Message, sa sera mieux, on ne balance pas des fonction qui execute des requetes dans un model. $this->loadModel('Utilisateur');