Je pense que le problème n'est pas de lancer la méthode mais de savoir qui
en a la responsabilité. 
Pour répondre à cette question, il faut se pencher sur un diagramme de
classes et surtout sur la programmation Objet.
Symfony est un superbe framework. Mais pour avoir des applications qui
tiennent la route et qui supporteront les évolutions à venir, il faut
également faire une analyse et une conception de qualité. Pour cela, il faut
savoir répartir les responsabilités entre les classes.

Manuel, pourrais-tu nous dire en langage naturel ce que ton action est
censée faire ? Et sur quoi portent les effectifs ?
Je pense que la simple réponse à cette dernière réponse apportera la
solution.

-----Message d'origine-----
De : [email protected] [mailto:[email protected]] De la
part de Stéphane
Envoyé : mardi 23 novembre 2010 14:20
À : [email protected]
Objet : Re: [symfony-fr] appel d' une fonction d' une même classe

Pas con :)


Before Printing, Think about Your Environmental Responsibility!
Avant d'Imprimer, Pensez à Votre Responsabilitée Environnementale!



2010/11/23 Lélio ML <[email protected]>


        Et pourquoi ne pas faire porter le calcul par ta classe Evaluation.
C'est
        elle qui porte a priori le calcul de l'effectif...
        Mais peut-être est-ce une autre classe de ton modèle. Et peut-être
également
        que ce calcul doit être placé sous la responsabilité d'une des
classe
        *Table.
        


        -----Message d'origine-----
        De : [email protected]
[mailto:[email protected]] De la
        
        part de manuel brossard
        Envoyé : mardi 23 novembre 2010 13:45
        À : [email protected]
        Objet : Re: [symfony-fr] appel d' une fonction d' une même classe
        

        OK je demande que cela.. Comment crée tu  une classe manuellement ?
Comment
        la rendre accessible depuis mon controleur courant.
        
        Merci, tu m' aides bcp la que la plupart des doc que je lis depuis 3
        semaines...
        
        
        
        
        Le 23 novembre 2010 13:41, Stéphane <[email protected]> a
écrit :
        
        
               Non effectivement il n'aime pas.
        
               Si tu veux laisser la function calculeffectif dans l'action,
tu dois
        faire, dans executeBLABLA:
               $this->calculeur = $this;
               Ainsi dans ton template tu auras accès à l'objet
blablaActions, et
        donc à sa fonction calculeffectif.
        
               L'autre solution est de déporter le code de calcul dans une
classe
        métier qui n'a que ça à faire (ainsi tu sépares ton code, et c'est
mieux :
        imagines que tu aies besoin d'appeler cette fonction au par ailleurs
: tu ne
        pourras pas car tu devras instancier l'action -ce qui n'est pas ton
boulot,
        mais celui du framework).
        
               Donc je te conseil vivement de créer une nouvelle classe
        "calculeurEffectifs", d'y mettre tes fonctions de calculs, et dans
ton
        executeBLABLA de faire ceci:
               $this->calculeur = new calculeurEffectifs();
        
               Après dans ton template tu pourras faire <?php echo
        $calculeur->calculeffectif(...);?>
        
        
        
        
               Before Printing, Think about Your Environmental
Responsibility!
               Avant d'Imprimer, Pensez à Votre Responsabilitée
Environnementale!
        
        
        
               2010/11/23 manuel brossard <[email protected]>
        
        
                       Je suis dans la classe consultantActions
(actions.class.php)
        donc il faut que je fasse un
        
                       $this->calculeurEffectif = new consultantActions ();
        
                       ?
        
        
        
                       je crois que j' ai déja essayé il aime pas trop car
il essai
        de contruire une nouvelle fois la classe consultantActions .
        
        
        
        
        
                       Le 23 novembre 2010 13:27, Stéphane
        <[email protected]> a écrit :
        
        
                               Ah.
        
                               Bah fait ceci alors, dans ton executeBLABLA:
        
                               $this->calculeurEffectif = new
taClasseDeCalcul();
        
                               Ainsi tu pourras l'utiliser dans ton template
        
                               <?php echo
$calculeurEffectif->calculblabla(...);?>
        
                               Tu peux aussi créer un Helper approprié et
créer des
        fonctions appropriés selon tes besoins.
                               Par exemple tu pourrais faire une classe
singleton
        qui serait utilisée au travers de tes helpers.
                               Ceci dit les helpers c'est bien pour la
logique
        d'affichage, pas pour gérer de la logique métier, donc je préfère
utiliser
        la première méthode donnée ci dessus.
        
        
        
                               Before Printing, Think about Your
Environmental
        Responsibility!
                               Avant d'Imprimer, Pensez à Votre
Responsabilitée
        Environnementale!
        
        
        
                               2010/11/23 manuel brossard
<[email protected]>
        
        
                                       Oui, justement je passe des
paramètres
        différents en fonction du template et surtout de leur emplacement.
        
                                       Ainsi pour la première ligne j' appel
ma
        fonction avec calculeffectif(1, $effectif, $id );
                                       Pour la seconde calculeffectif(2,
$effectif,
        $id );
                                       etc..
        
                                       Je parcours donc plusieurs fois mon
tableau
        de résultat pour en extraire les valeurs des colonnes souhaités dans
mon
        template.
        
                                       Merci de ton aide.
        
                                       Les tutos jobeet sont pas mal.. mais
ya pas
        bcp d' info sur ces cas.. la malheuresement.. moins bateau que je
mets les
        cubes dans les cubes ou l' explication est presque évidente.. trop
surement
        ,  mais c' est déja pas mal quand un on se fait au mvc je
reconnais..
        
        
        
        
        
        
                                       Le total est fonction d' une ligne d'
un
        tableau..
        
        
                                       Le 23 novembre 2010 13:04, Stéphane
        <[email protected]> a écrit :
        
        
                                               Aaah ok tu appels ces
fonctions dans
        le template au lieu de les appeler dans l'action !
                                               On le voit car l'erreur
stipule que
        tu appel ->calculeffectif sur un objet de la classe sfPHPView !
        
                                               Il faut que tu appels cette
fonction
        dans le executeShowevaluation par exemple :
        
                                                  public function
        executeShowevaluation (sfWebRequest $request)
                                                  {
                                                  $this->id =
        $request->getParameter('id');
                                                  $this->name =
        Doctrine_Core::getTable('
        
Customer')->getFirstName($this->id);
                                                  $this->evaluation =
        
Doctrine_Core::getTable('Evaluation')->getEvaluationbycustomer($this->id);
        
                                                 $this->total =
        $this->calculeffectif(....);
                                                  }
        
        
                                               Ainsi dans ton template, tu
auras
        accès la variable $total :
                                               <?php echo $total?>
        
                                               Je te conseil vivement de
lire les
        tutoriaux (vraiment bien faits) de symfony (genre Jobeet)
        
        
        
        
        
                                               Before Printing, Think about
Your
        Environmental Responsibility!
                                               Avant d'Imprimer, Pensez à
Votre
        Responsabilitée Environnementale!
        
        
        
                                               2010/11/23 manuel brossard
        <[email protected]>
        
        
                                                       Quel objet ?
        
                                                       Voici la classe
complète,
        mes 3 premières fonctions renvoi bien le résultat attendu dans mes
        templates..
        
        
                                                       class
consultantActions
        extends autoConsultantActions
                                                       {
        
                                                          public function
        executeShow (sfWebRequest $request)
                                                          {
                                                          $this->id =
        $this->getUser()->getGuardUser()->getId();
                                                          $this->customers =
        Doctrine_Core::getTable('Customer')->getMycustomer($this->id);
                                                          }
        
                                                          public function
        executeShowevaluation (sfWebRequest $request)
                                                          {
                                                          $this->id =
        $request->getParameter('id');
                                                          $this->name =
        Doctrine_Core::getTable('Customer')->getFirstName($this->id);
                                                          $this->evaluation
=
        
Doctrine_Core::getTable('Evaluation')->getEvaluationbycustomer($this->id);
                                                          }
        
                                                          public function
        calculeffectif ($effectif, $theme, $customer)
        
                                                          {
                                                           $array =
        $this->evaluation =
        
Doctrine_Core::getTable('Evaluation')->getEvaluationbycustomer($customer);
                                                           $j=0;
                                                           foreach ($array
as $i =>
        $value) {
                                                            if (
        $array[$i]['score'.$theme]  == $effectif) {
                                                               $j++;
                                                              }
                                                           }
                                                          return $j;
        
                                                          }
        
        
        
        
        
                                                       Le 23 novembre 2010
12:44,
        Stéphane <[email protected]> a écrit :
        
        
                                                               D'acc, le
code de la
        classe entière c'est possible ? et le code d'utilisation de l'objet
?
        
                                                               Sinon on ne
peut pas
        vraiment aider... Tu le comprends sûrement !
        
        
                                                               Before
Printing,
        Think about Your Environmental Responsibility!
                                                               Avant
d'Imprimer,
        Pensez à Votre Responsabilitée Environnementale!
        
        
        
                                                               2010/11/23
manuel
        brossard <[email protected]>
        
        
                                                                       Le
voici...
        
        
        
        
public
        function totaleffectifbytheme ( $theme, $customer)
        
                                                                          {
        
        
        $this->calculeffectif(1, $theme, $customer);
        
        $this->calculeffectif(2, $theme, $customer);
        
        $this->calculeffectif(3, $theme, $customer);
        
        $this->calculeffectif(4, $theme, $customer);
        
        $this->calculeffectif(5, $theme, $customer);
        
        $this->efftotal= $this->eff1 + $this->eff2 + $this->eff3 +
$this->eff4 +
        $this->eff5 ;
        
        
        
return
        $this->efftotal;
        
                                                                          }
        
        
        
                                                                       Le 23
        novembre 2010 12:32, Stéphane <[email protected]> a écrit :
        
        
        
Le
        coooooode :)
        
        
        pastebin est ton ami pour poster du code sur le net :)
        
        
        
        Before Printing, Think about Your Environmental Responsibility!
        
        Avant d'Imprimer, Pensez à Votre Responsabilitée Environnementale!
        
        
        
        
        2010/11/23 manuel brossard <[email protected]>
        
        
        
        Oui j' ai essayé cela mais cela ne change rien..
        
        
        
        
        
        
        
        
        
        Le 23 novembre 2010 12:28, Stéphane <[email protected]> a
écrit :
        
        
        
        
        Si tu pouvais nous montrer le code, ça aiderait !
        
        
        
        Tu utilises bien $this->NOMDELAFONCTION ?
        
        Je demande ça parce qu'au vu du code :
        
        
        
        $calcul3=FonctionCalculBase($p1, $p2, $p3)
        
        
        
        on dirait que non
        
        
        
        $calcul3= $this->FonctioncalculBase(...); ?
        
        
        
        
        
        Before Printing, Think about Your Environmental Responsibility!
        
        Avant d'Imprimer, Pensez à Votre Responsabilitée Environnementale!
        
        
        
        
        
        
        
        2010/11/23 mantex <[email protected]>
        
        
        
        Bonjour à tous,
        
        
        
        Je développe mon premier projet sous symfony et je rencontre pas mal
        
        de difficulté pour trouver ou mettre mon code voir quel fonction
        
        utilisé pour faire des choses simples.
        
        
        
        Par exemple ..
        
        
        
        Dans une classe evaluation.action
        
        
        
        J' ai 2 fonctions..
        
        
        
        Une qui effectue un calcul
        
        
        
        et une autre qui est cencé faire la sommes des valeurs retourné par
la
        
        première.
        
        
        
        Exemple shématisé :
        
        
        
        FonctionCalculBase($p1, $p2, $p3)
        
        
        
        {
        
        ....
        
        }
        
        
        
        FonctionSomme ($p1, $p2)
        
        
        
        {
        
        
        
        $p3='valeur';
        
        $calcul1=FonctionCalculBase($p1, $p2, $p3)
        
        $calcul2=FonctionCalculBase($p1, $p2, $p3)
        
        $calcul3=FonctionCalculBase($p1, $p2, $p3)
        
        
        
        return $somme= calcul1 + calcul2  + calcul3;
        
        
        
        }
        
        
        
        J' obtiens un erreur à l' appel des mes foncions
FonctionCalculBase()
        
        dans le FonctionSomme.
        
        
        
        Une idée ?
        
        
        
        
        
        
        
        
        
        '
        
        
        
        
        
        
        
        --
        
        Vous recevez ce message, car vous êtes abonné au groupe Google
Groupes
        Symfony-fr.
        
        Pour envoyer un message à ce groupe, adressez un e-mail à
        [email protected].
        
        Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        

        Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
        
        
        
        
        
        --
        
        
        
        Vous recevez ce message, car vous êtes abonné au groupe Google
Groupes
        Symfony-fr.
        
        Pour envoyer un message à ce groupe, adressez un e-mail à
        [email protected].
        
        Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        

        Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
        
        
        --
        
        Cordialement,
        
        
        
        Manuel Brossard
        
        Twitter: twitter.com/infonel
        
        Skype : mantex2039
        
        
        
        Tel: + 33 9 72 17 00 41
        
        
        
        
        
        
        
        
        
        
        --
        
        
        
        Vous recevez ce message, car vous êtes abonné au groupe Google
Groupes
        Symfony-fr.
        
        Pour envoyer un message à ce groupe, adressez un e-mail à
        [email protected].
        
        Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        

        Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
        
        
--
        
Vous
        recevez ce message, car vous êtes abonné au groupe Google Groupes
        Symfony-fr.
        
Pour
        envoyer un message à ce groupe, adressez un e-mail à
        [email protected].
        
Pour
        vous désabonner de ce groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
        
Pour
        plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                                                                       --
        
        Cordialement,
        
        
Manuel
        Brossard
        
Twitter:
        twitter.com/infonel
                                                                       Skype
:
        mantex2039
        
                                                                       Tel:
+ 33 9
        72 17 00 41
        
        
        
        
        
                                                                       --
        
                                                                       Vous
recevez
        ce message, car vous êtes abonné au groupe Google Groupes
Symfony-fr.
                                                                       Pour
envoyer
        un message à ce groupe, adressez un e-mail à
[email protected].
                                                                       Pour
vous
        désabonner de ce groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
                                                                       Pour
plus
        d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                                                               --
                                                               Vous recevez
ce
        message, car vous êtes abonné au groupe Google Groupes Symfony-fr.
                                                               Pour envoyer
un
        message à ce groupe, adressez un e-mail à
[email protected].
                                                               Pour vous
désabonner
        de ce groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
                                                               Pour plus
d'options,
        consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                                                       --
                                                       Cordialement,
        
                                                       Manuel Brossard
                                                       Twitter:
twitter.com/infonel
                                                       Skype : mantex2039
        
                                                       Tel: + 33 9 72 17 00
41
        
        
        
        
        
                                                       --
        
                                                       Vous recevez ce
message, car
        vous êtes abonné au groupe Google Groupes Symfony-fr.
                                                       Pour envoyer un
message à ce
        groupe, adressez un e-mail à [email protected].
                                                       Pour vous désabonner
de ce
        groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
                                                       Pour plus d'options,
        consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                                               --
                                               Vous recevez ce message, car
vous
        êtes abonné au groupe Google Groupes Symfony-fr.
                                               Pour envoyer un message à ce
groupe,
        adressez un e-mail à [email protected].
                                               Pour vous désabonner de ce
groupe,
        envoyez un e-mail à l'adresse
[email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
                                               Pour plus d'options,
consultez la
        page de ce groupe : http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                                       --
                                       Cordialement,
        
                                       Manuel Brossard
                                       Twitter: twitter.com/infonel
                                       Skype : mantex2039
        
                                       Tel: + 33 9 72 17 00 41
        
        
        
        
        
                                       --
        
                                       Vous recevez ce message, car vous
êtes
        abonné au groupe Google Groupes Symfony-fr.
                                       Pour envoyer un message à ce groupe,
        adressez un e-mail à [email protected].
                                       Pour vous désabonner de ce groupe,
envoyez
        un e-mail à l'adresse [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
                                       Pour plus d'options, consultez la
page de ce
        groupe : http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                               --
                               Vous recevez ce message, car vous êtes abonné
au
        groupe Google Groupes Symfony-fr.
                               Pour envoyer un message à ce groupe, adressez
un
        e-mail à [email protected].
                               Pour vous désabonner de ce groupe, envoyez un
e-mail
        à l'adresse [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
                               Pour plus d'options, consultez la page de ce
groupe
        : http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
                       --
                       Cordialement,
        
                       Manuel Brossard
                       Twitter: twitter.com/infonel
                       Skype : mantex2039
        
                       Tel: + 33 9 72 17 00 41
        
        
        
        
        
                       --
        
                       Vous recevez ce message, car vous êtes abonné au
groupe
        Google Groupes Symfony-fr.
                       Pour envoyer un message à ce groupe, adressez un
e-mail à
        [email protected].
                       Pour vous désabonner de ce groupe, envoyez un e-mail
à
        l'adresse [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
                       Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
               --
               Vous recevez ce message, car vous êtes abonné au groupe
Google
        Groupes Symfony-fr.
               Pour envoyer un message à ce groupe, adressez un e-mail à
        [email protected].
               Pour vous désabonner de ce groupe, envoyez un e-mail à
l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> 
        
        <mailto:symfony-fr%[email protected]
<mailto:symfony-fr%[email protected]> > .
        
               Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        
        
        
        --
        Cordialement,
        
        Manuel Brossard
        Twitter: twitter.com/infonel
        Skype : mantex2039
        
        Tel: + 33 9 72 17 00 41
        
        
        
        --
        Vous recevez ce message, car vous êtes abonné au groupe Google
Groupes
        Symfony-fr.
        Pour envoyer un message à ce groupe, adressez un e-mail à
        [email protected].
        Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
        [email protected]
<mailto:symfony-fr%[email protected]> .
        Pour plus d'options, consultez la page de ce groupe :
        http://groups.google.com/group/symfony-fr?hl=fr
        
        
        --
        Vous recevez ce message, car vous êtes abonné au groupe Google
Groupes Symfony-fr.
        Pour envoyer un message à ce groupe, adressez un e-mail à
[email protected].
        Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
[email protected]
<mailto:symfony-fr%[email protected]> .
        Pour plus d'options, consultez la page de ce groupe :
http://groups.google.com/group/symfony-fr?hl=fr
        
        


--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes
Symfony-fr.
Pour envoyer un message à ce groupe, adressez un e-mail à
[email protected].
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse
[email protected].
Pour plus d'options, consultez la page de ce groupe :
http://groups.google.com/group/symfony-fr?hl=fr


-- 
Vous recevez ce message, car vous êtes abonné au groupe Google 
Groupes Symfony-fr.
Pour envoyer un message à ce groupe, adressez un e-mail 
à [email protected].
Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse 
[email protected].
Pour plus d'options, consultez la page de ce groupe : 
http://groups.google.com/group/symfony-fr?hl=fr

Répondre à