Création d'un site de A à Z : utiliser des fonctions d'autres controll

Par Msappdem, il y a 12 ans


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

Benjamin Derepas, il y a 12 ans

Peut être comme ça ?

<?php $var = $this->request('Controller',function($arg);?>
Msappdem, il y a 12 ans

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);?>
Benjamin Derepas, il y a 12 ans

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, il y a 12 ans

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.

Pewel-OutOfNutella, il y a 12 ans

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

$var = $this->request('Controller','function', array("param" => $param);
Msappdem, il y a 12 ans

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

Msappdem, il y a 12 ans

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.

antho07, il y a 12 ans

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 :$

antho07, il y a 12 ans

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

Msappdem, il y a 12 ans

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.