Bonjour,

Je cherche à utiliser des fonctions d'autres controller afin de ne pas avoir à les dupliquer.

Je sais le faire selon le tuto de cette façon :

<?php $var = $this->request('Controller','function'); ?>

mais comment faire la même chose en passant une variable ?

D'avance merci.

11 réponses


antho07
Réponse acceptée

Essaye ça:

public function request($controller,$action,$params = array()){
        $controller .= 'Controller';
        require_once(ROOT.DS.'controller'.DS.$controller.'.php');  
        $c = new $controller();
         return call_user_func_array(array($c,$action),$params);
    }

Puis

$var = $this->request('Pictures','test',array('param1','param2'));

cordialement

Antho

Peut être comme ça ?

<?php $var = $this->request('Controller',function($arg);?>
Msappdem
Auteur

Merci d'avoir répondu, je viens d'asseayer et j'ai le message d'ereur suivant :

Fatal error: Call to undefined function test()

<?php $var = $this->request('Controller',test($arg);?>

As tu bien une fonction test dans ton controller ? (et question bête, as tu bien remplacer 'Controller' par le nom de ton controller ?

Msappdem
Auteur

ma fonction test() existe bien dans mon controller et oui j'ai bien remplacé 'Controller'.
J'ai fais un test sans argument de la même fonction test() et cela fonctionne.
Je ne parviens pas à passer d'argument.

Je connais pas le tuto mais voici peut être une piste :

$var = $this->request('Controller','function', array("param" => $param);
Msappdem
Auteur

la l'erreur est qu'il manque un argument à passer à la fonction test()

Bonjour

$this->requestAction(
    array('controller' => 'articles', 'action' => 'view'),
    array('pass' => array(5))
);

trouvé là:

http://book.cakephp.org/2.0/fr/controllers.html#Controller::requestAction

Msappdem
Auteur

Je ne sais pas utiliser requestAction mais en modifiant ma fonction request j'arrive (je crois) à avoir ce que je veux mais je ne sais pas comment passer mes paramètres :

function request($controller,$action,$params = NULL){
            $controller .= 'Controller';
            require_once ROOT.DS.'controller'.DS.$controller.'.php';
            $c = new $controller();
            if($params !== NULL){
                return $c->$action('val1','val2');
            }else{
                return $c->$action();
            }
        }

appelée comme ceci :

$var = $this->request('Pictures','test','???');
debug($var);

la fonction test() :

function test($param1,$param2){
            return $param1.' '.$param2;
        }

Le résultat est :

val1 val2

Je voudrais remplacer les valeur "val1 et val2" inscrite en dur par d'autres valeurs issues de $params dans request.

En effet, j'ai répondu à coter de la question... faut dire que le MVC qu'a présenter Grafikart est très fortement inspiré de CakePHP :$

Msappdem
Auteur

J'aurais du le savoir avant.
Cette même fonction est utilisée ailleurs (__construct du dispatcher).
Grand merci à toi Antho et aux autres d'avoir répondu.