Salut tt le monde,
je viens de débuter avec symfony, j'ai généré un module admin employe, je veux lorsque je crée un nouveau employe il me crée avant un autre objet, je trouve pas quelle méthode dois je surcharger.
Merci
Version imprimable
Salut tt le monde,
je viens de débuter avec symfony, j'ai généré un module admin employe, je veux lorsque je crée un nouveau employe il me crée avant un autre objet, je trouve pas quelle méthode dois je surcharger.
Merci
j'ai oublié de mentionner que j'utilise Doctrine.
merci
Pourrais-tu développer un peu l'origine de ton pb ?
Ton employe c'est une table dans ta Base ?
Essaye de voir dans le répertoire lib/model tu devrais avoir la description de ta BDD avec l'ensemble des class permettant de la modifier
recherche ta classe employer.
Normallement c'est un truc du genre $c = new employe();
exactement employe c'est une table de ma base et j'ai une autre table oid tel que la clef I de oid etant la clef primaire de la table employe donc lors de l'insertion d'un new employe je dois en // insérer un enregistrement dans la table oid. donc je cherche la méthode qui permet l'insertion d'un new employe pour la surcharger.
merci beaucoup
va dans ton repertoire lib/model
dans model tu as un sous répertoire om
Ici sont décris toutes les classes pour modifier tes tables
Si tu ouvre le fichier Baseemploye.php tu vas trouver les accesseurs de ton objet employe : setId(), setName(), ..., getId(), getName(), ...
Retourne ensuite dans lib/model
Ouvre le fichier employe.php
Normallement dans ce fichier par défaut tu n'a rien, tu peux donc tout à faire écrire une méthode setEmploye() ou tu vas créer un nouvel employe et en meme temps créer une nouvelle entrer dans ta table oid.
exemple :
ton code devrait ressemblé à cela ;)Code:
1
2
3
4
5
6
7
8
9
10 setEmploye($params){ $e = new employe(); $e->setId(1); $e->setName('robert'); $e->save(); $o = new oid(); $o->setId($c->getId()); $o->save(); }
Merci, ;)
j'ai pas trouvé le sous rep om, je vous rappel que j'utilise Doctrine non pas propel.
dans mon cas j'ai une classe baseemploye.class.php, mais elle ne contient ni des successeur ni des geteur, plutot une function setup()
arf moi j'utilise propel :/
Décris moi ta fonction setup, voir même complètement ta classe BaseEmploye.class.php :)
voila ma classe :
Citation:
<?php
/**
* Employe form base class.
*
* @package form
* @subpackage employe
* @version SVN: $Id: sfDoctrineFormGeneratedTemplate.php 8508 2008-04-17 17:39:15Z fabien $
*/
class BaseEmployeForm extends BaseFormDoctrine
{
public function setup()
{
$this->setWidgets(array(
'oid_uoid' => new sfWidgetFormInputHidden(),
'category_id' => new sfWidgetFormDoctrineSelect(array('model' => 'Category', 'add_empty' => false)),
'name' => new sfWidgetFormInput(),
'lastname' => new sfWidgetFormInput(),
'login' => new sfWidgetFormInput(),
'pwd' => new sfWidgetFormInput(),
'email' => new sfWidgetFormInput(),
));
$this->setValidators(array(
'oid_uoid' => new sfValidatorDoctrineChoice(array('model' => 'Employe', 'column' => 'oid_uoid', 'required' => false)),
'category_id' => new sfValidatorDoctrineChoice(array('model' => 'Category')),
'name' => new sfValidatorString(array('max_length' => 255, 'required' => false)),
'lastname' => new sfValidatorString(array('max_length' => 255, 'required' => false)),
'login' => new sfValidatorString(array('max_length' => 255, 'required' => false)),
'pwd' => new sfValidatorString(array('max_length' => 255, 'required' => false)),
'email' => new sfValidatorString(array('max_length' => 255, 'required' => false)),
));
$this->widgetSchema->setNameFormat('employe[%s]');
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
parent::setup();
}
public function getModelName()
{
return 'Employe';
}
}
Je comprend pas tout à ce code
mais ça doit être un truc du genre
et à la place des sfWidgetForm... la remplacer par tes nouvelles valeurs...Code:
1
2
3
4
5
6
7
8
9
10 $c = new EmployeForm(); $c->setWidgets(array( 'oid_uoid' => new sfWidgetFormInputHidden(), 'category_id' => new sfWidgetFormDoctrineSelect(array('model' => 'Category', 'add_empty' => false)), 'name' => new sfWidgetFormInput(), 'lastname' => new sfWidgetFormInput(), 'login' => new sfWidgetFormInput(), 'pwd' => new sfWidgetFormInput(), 'email' => new sfWidgetFormInput(), ));
Je m'avance pas trop...mais bon regarde bien dans ta doc ça doit bien être expliqué...comme moi ça l'est dans mon cas ;)
merci beaucoup, mais j'ai décidé de commencer par propel.
merci beaucoup
En voilà une sage décision :D
Tu n'a plus qu'à reprendre ce que j'ai dit plus haut dans ce cas ;)
Bonne continuation
C'est la même chose pour doctrine. Comme l'a suggéré nimo, il faut bien implémenter le comportement souhaité dans la classe employé dérivée de baseemployé du modèle. Cependant sonja a presenté le fichier php lié au form et non pas au modèle...
Je crois que la methode a surcharger qui t'interessait pour doctrine est preSave.
Ce qui donnerais quelque chose comme :
;)Code:
1
2
3
4
5 public function preSave($evt) { $o = new objet(); $o->save(); }
Pour propel :
si ce que tu veux, c'est pour chaque nouvel objet, créer un autre objet avant la sauvegarde du nouvel objet ( comme indique dans le premier post )
tu peux mettre dans ton model :
Code:
1
2
3
4
5
6
7
8
9 public function save($con=null) { if($this -> isNew()) { $o = new MyObject(); $o -> save(); } parent::save($con); }
merci beaucoup BobLunique,
j'ai déjà passé à propel.
Merciiiiiiiiiiiiiiiiiiiii c'est très gentil.