trouver le nom d'un modèle dans le contrôleur

0 views
Skip to first unread message

zou...@gmail.com

unread,
Jul 21, 2008, 11:18:26 AM7/21/08
to cakep...@googlegroups.com
re Bonjour,


voilà j'ai un contrôleur:

<?php
class InfosController extends AppController {

var $name = 'Infos';

function edit($id = null)
{
// Langues à éditer
$locales = array_values(Configure::read('Config.languages'));
$this->Info->locale = $locales;

// Sauvegarde
if(isset($this->data))
{
$this->Info->save($this->data);
$this->redirect('index');
}

$this->data = $this->Info->read(null, $id);
}
}
?>


qui est lié à un modèle, mais en fait cette action edit, appartient à
plusieurs modèles, et donc du coup je voudrais en faire un générique
dans app_controler.php, un edit pour tous,


donc comment à partyir du "$this" trouver le modèle sur lequel on travaille?

en fait remplacer le "$this->Info" par un "$this->?????????"

merci d'avance

avairet

unread,
Jul 21, 2008, 3:37:16 PM7/21/08
to Cakephp-fr
Bonsoir,

Je donne juste un avis : je ferais plutôt une méthode edit() dans
app_model et je n'aurais plus besoin de chercher le nom du modèle dans
app_controller...

kazhar

unread,
Jul 21, 2008, 5:42:24 PM7/21/08
to Cakephp-fr
avairet a parfaitement raison. Cette fonction n'a rien à faire dans
app_controller. Elle doit aller dans app_model.

Mehdi AMINI

unread,
Jul 21, 2008, 6:37:41 PM7/21/08
to cakep...@googlegroups.com
Salut,

>
> Je donne juste un avis : je ferais plutôt une méthode edit() dans
> app_model et je n'aurais plus besoin de chercher le nom du modèle dans
> app_controller...

Et tu l'appelles comment la méthode depuis l'action dans le controlleur ?

Mehdi

avairet

unread,
Jul 23, 2008, 7:51:37 AM7/23/08
to Cakephp-fr
J'appelerai ma fonction $this->MonModel->edit(); tout simplement, mais
il est vrai que le nom edit() est mal choisi et peut prêter à
confusion, donc je ferais une méthode edit_custom() dans mon
app_model.php

Mehdi AMINI

unread,
Jul 23, 2008, 10:26:05 AM7/23/08
to cakep...@googlegroups.com
Le 23 juillet 2008 13:51, avairet <con...@vairet.net> a écrit :
>
> J'appelerai ma fonction $this->MonModel->edit(); tout simplement,

Ce qui laisse la question initiale ouverte ... il faut trouver
"MonModel" depuis app_controller puisqu'il veut avoir une action
générique

Mehdi.

avairet

unread,
Jul 23, 2008, 10:53:51 AM7/23/08
to Cakephp-fr
Mais non Medhi, une méthode dispo dans app_model est valable pour tout
modèle.
Donc dans ton contrôleur quel que soit le nom du modèle, la méthode
sera bien appelée, je ne vois pas le problème.

Ce que demandait zoumbla c'était trouvé le nom du modèle dans
app_controller car il voulait utiliser la même méthode pour plusieurs
modèles et dans ce cas, effectivement c'était impossible. Mais là, si
on met la méthode dans app_model, on a plus à se soucier du nom du
modèle.




On 23 juil, 16:26, "Mehdi AMINI" <joker....@gmail.com> wrote:

francky06l

unread,
Jul 23, 2008, 5:34:17 PM7/23/08
to Cakephp-fr
Medhi a raison quelque part .. en fait si tu veux acceder au model
(meme app_model de base), il te faut un controller, donc mets la
methode dans le app_controller et prend le premier model que tu as
sous la main => $this->modelClass (verifies quand meme qu'il est
present isset($this->modelClass) ) ..

avairet

unread,
Jul 24, 2008, 4:37:51 AM7/24/08
to Cakephp-fr
Euh je crois qu'on ne se comrpend plus les uns les autres...

Je n'ai jamais dit que je me passais d'un contrôleur ?!

Notre ami a posé la question de savoir comment rendre dispo une
méthode edit() pour plusieurs MODELES (et non pas contrôleurs) et il
voulait la mettre dans app_controller() en essayant de déterminer un
nom de modèle à chaque appel de cette méthode.

Selon moi, il est plus simple de mettre cette méthode dans
app_model(), ce qui la rend bien dispo pour plusieurs MODELES, comme
souhaité.

Ensuite dans n'importe quel contrôleur, en passant par le modèle lié à
ce contrôleur ou tout autre modèle associé (hasMany, HABTM, etc.) ou
tout autre modèle appelé dans $uses, on peut donc appeler la méthode
edit() de app_model : $this->NomDuModel->edit() et la recherche sur le
nom du modèle devient inutile.

Donc soit je n'ai rien compris à ce que demandait Zoumbla au départ,
soit il y a une erreur de lecture de certains d'entre vous...

Maintenant, je remercie Francky d'avoir indiqué la propriété
"modelClass", il me semblait bien en effet qu'on pouvait avoir le nom
du modèle depuis le contrôleur, mais le nom de la propriété n'est pas
assez parlant et je ne l'avais pas retenu...

Mehdi AMINI

unread,
Jul 24, 2008, 10:05:53 AM7/24/08
to cakep...@googlegroups.com
Salut,

> Notre ami a posé la question de savoir comment rendre dispo une
> méthode edit() pour plusieurs MODELES (et non pas contrôleurs) et il
> voulait la mettre dans app_controller() en essayant de déterminer un
> nom de modèle à chaque appel de cette méthode.
>

Effectivement, seulement son explication de départ partait d'une
méthode orientée controlleur, donc action. Et je suis resté sur l'idée
qu'il voulait une "action" générique au niveau app_controller donc.

Mehdi

avairet

unread,
Jul 24, 2008, 10:23:59 AM7/24/08
to Cakephp-fr
Merci Mehdi de me confirmer que je ne suis pas totalement fou ;o))

zou...@gmail.com

unread,
Jul 24, 2008, 12:34:54 PM7/24/08
to cakep...@googlegroups.com
Bonsoir,

en fait d'un point de vue purement architectural, je pense que le
mettre dans le contrôleur générique est plus juste, c'est une action
sur le modèle, pas une action du modèle (du genre peer)...enfin me
fais-je comprendre;-)


merci en tout cas

avairet a écrit :
Reply all
Reply to author
Forward
0 new messages