Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un problème j'ai actuellement un projet avec des classes PHP associé, je vois pas comment je peux réutilisé mes classes avec le zf.
Est ce que je dois mettre mes classes directement dans des models ou alors j'ai une partie qui doit être dans le controller ?
Un exemple d'une de mes classes :
<?php class account extends main { protected $mysql = null; protected $s_error = null; protected $n_id = null; protected $s_login = null; protected $s_password = null; protected $s_name = null; protected $s_email = null; protected $n_group = null; protected $a_group = array ( 'admin' => 0, 'member' => 1, 'visitor' => 2 ); public function __construct ( $n_id ) { global $mysql; if ( isset ( $mysql ) === true ) { $this->mysql = $mysql; } if ( is_int ( $n_id ) === true && $n_id > 0 ) { $this->n_id = $n_id; } } public function get_login () { return $this->s_login; } public function get_password (){ return $this->s_password; } public function get_name (){ return $this->s_name; } public function get_account (){ return array ( 'login' => $this->s_login, 'password' => $this->s_password, 'name' => $this->s_name, 'email' => $this->s_email ); } public function set_login ( $s_login ){ $this->set_error (); $s_login = trim ( $s_login ); if ( $s_login === '' || strlen ( $s_login ) < 4 || strlen ( $s_login ) > 32 ) { $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'Invalid username', $s_login ); return false; } // --- $this->s_login = $s_login; return true; } public function set_password ( $s_password ) { $this->set_error (); $s_password = trim ( $s_password ); if ( $s_password === '' || strlen ( $s_password ) < 4 || strlen ( $s_password ) > 32 ) { $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'Invalid password', $s_password ); return false; } // --- $this->s_password = $s_password; return true; } public function set_name ( $s_name ){ $this->set_error (); $s_name = trim ( $s_name ); if ( $s_name == '' || strlen ( $s_name ) < 4 ){ $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'Invalid name', $s_name ); return false; } // --- $this->s_name = $s_name; return true; } public function set_email ( $s_email ) { $this->set_error(); $s_email = trim ( $s_email ); if ( $s_email === '' || strlen ( $s_email ) < 4 || strlen ( $s_email ) > 32) { $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'Invalid email', $s_email ); return false; } // --- $this->s_email = $s_email; return true; } public function set_group ( $n_group ){ $this->set_error(); if ( is_int ( $n_group ) === false ){ $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'n_group is not integer', $s_group ); return false; } if ( in_array( $n_group, $this->a_group, true ) === false ){ $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'invalid group', $s_group ); return false; } // --- $this->n_group = $s_group; return true; } public function load () { $this->set_error (); if ( $this->n_id === null ) { $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'Undefined id' ); return false; } // --- $s_query = ' SELECT acc_id, acc_login, acc_password, acc_name, acc_email, acc_group FROM account WHERE acc_id = ' . $this->n_id; if ( ( $r_result = $this->mysql->query ( $s_query ) ) === false || $r_result->num_rows !== 1 ) { $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'Unable to SELECT account', $s_query ); return false; } // --- list ( $this->n_id, $this->s_login, $this->s_password, $this->s_name, $this->s_email, $this->n_group ) = $r_result->fetch_row (); foreach ( array ( 'n_id', 'n_group' ) as $s_field ) { settype ( $this->$s_field, 'int' ); } $r_result->close (); return true; } public function save (){ $this->set_error (); if ( $this->n_id === null ) { $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'Undefined id' ); return false; } $s_query = ' UPDATE account SET acc_login = "'.$this->mysql->real_escape_string( $this->s_login ).'", acc_password = "'.$this->mysql->real_escape_string( $this->s_password ).'", acc_name = "'.$this->mysql->real_escape_string( $this->s_name ).'", acc_email = "'.$this->mysql->real_escape_string( $this->s_email ).'", acc_group = '.$this->n_group .' WHERE acc_id = '.$this->n_id; if ( $this->mysql->query ( $s_query ) === false ) { $this->set_error ( __CLASS__, __METHOD__, __LINE__, 'Unable to UPDATE account', $s_query ); return false; } return true; } } ?>
Merci d'avance de votre aide
Dernière modification par xender (22-10-2008 10:29:54)
Hors ligne
Bonjour,
Tu peux utiliser tes classes exactement comme avant le ZF. Tu les dépose dans un répertoire. Ensuite tu fais un include de ta classe comme avant et tu l'utilises comme avant. Rien ne t'empêche d'utiliser tes anciens codes exactement comme avant.
Cordialement,
Philippe
Hors ligne
ah ok, mais je dois passer a coté de fonction pratique de zf non ?
Hors ligne
Salut,
Tu peux mettre toutes tes fonctions dans le modèle, à l'exception des actions "save" et "load" qui iraient vraisemblablement dans le contrôleur.
Pour ce qui est des requêtes, tu peux les générer avec Zend_Db.
Voilà.
Hors ligne
Ok, mais pourquoi les actions save et load ne sont pas dans le model ?
J'ai pas trouvé dans la doc pour mettre tel quel mes requètes sans pdo et sans orm, je préfaire écrire mes requètes a la main, je trouve peu d'utilité a utilisé les méthodes de zend_db ou peut etre que je passe a coté de quelque chose ?
Hors ligne
Car à première vue, "save" et "load" sont des actions. Mais peut-etre n'est-ce pas le cas.
Si le mot "action" ne te dit rien, je te conseille fortement de te documenter sur le MVC (documentation officielle du ZF ou http://fr.wikipedia.org/wiki/Mod%C3%A8l … %C3%B4leur) et sur le rôle de chacun de ses composants (modèle/vue/contrôleur). Ensuite, tu sauras toi-même où placer tes fonctions.
Pour Zend_Db, il te permet de respecter l'esprit "objet" du Framework et également de pouvoir passer d'un SGBD à l'autre très facilement.
Dernière modification par acharrex (22-10-2008 15:31:22)
Hors ligne