$add = $zdb->db->insert(PREFIX_DB . LEND_PREFIX . self::TABLE, $values);
$this->_object_id = $zdb->db->lastInsertId();
vers$insert = $zdb->insert(LEND_PREFIX . self::TABLE)
->values($values);
$add = $zdb->execute($insert);
$this->_object_id = $zdb->driver->getLastGeneratedValue();
c'est pas trop compliqué.$select_count = new Zend_Db_Select($zdb->db);
$select_count->from(PREFIX_DB . LEND_PREFIX . LendObject::TABLE, array('count(*)'))
->where('is_active = 1')
->where(PREFIX_DB . LEND_PREFIX . LendObject::TABLE . '.category_id = ' . PREFIX_DB . LEND_PREFIX . self::TABLE . '.' . self::PK);
$select = new Zend_Db_Select($zdb->db);
$select->from(PREFIX_DB . LEND_PREFIX . self::TABLE, array('*', 'nb' => new Zend_Db_Expr('(' . $select_count . ')')))
->where('is_active = 1')
->order('name');
et que maintenant elle ressemble à ça:$select_count = $zdb->select(LEND_PREFIX . LendObject::TABLE)
->columns(array(new Zend\Db\Sql\Predicate\Expression('count(*)')))
->where(array(
'is_active' => 1,
new Zend\Db\Sql\Predicate\Expression(PREFIX_DB . LEND_PREFIX . LendObject::TABLE . '.category_id = ' . PREFIX_DB . LEND_PREFIX . self::TABLE . '.' . self::PK)
));
$select = $zdb->select(LEND_PREFIX . self::TABLE)
->columns(array('*', 'nb' => new Zend\Db\Sql\Predicate\Expression('(' . $zdb->sql->getSqlStringForSqlObject($select_count) . ')')))
->where(array('is_active' => 1))
->order('name');
J'ai réussi, mais j'ai juste galéré pour retrouver le même fonctionnement.PetitCalgonAutant, PHP + Smarty 3, j'y arrive assez bien et je trouve ça assez confortable et pratique à utiliser, j'aime bien Smarty, il a des fonctions agréables à utiliser pour les foreach, le code Smarty est assez clean et c'est facile de balancer des infos vers Smarty. On a vraiment un code productif PHP d'un côté, et un code HTML de l'autre. Rien à redire la dessus.Alors du coup là tu parles de l'architecture de ton appli en particulier et non pas des qualités inhérentes des langages. Il faut savoir pour qui n'est pas habitué à PHP que toute appli uniquement basée sur Zend Framework a de bonnes chances d'avoir 5 ans de retard sur une architecture à l'état de l'art.
Par contre, j'ai eu beaucoup de mal à m'habituer à Zend_DB (qui dans ce cas ne fait que l'interface avec la BDD, et rien d'autre).
Surtout là, je rage parce que je dois passer de Zend_DB1 à Zend_DB2 et que ce qui marchait avant ne marche plus du tout et je dois tout reécrire.
PetitCalgonDans le projet indiqué, les classes sont écrites de telles manières, qu'il y a une variable privée $_machin sans membre public et que l'accès/écriture sur la variable se fait via les super fonctions __get($name) / __set($name), et moi comme un idiot, j'ai repris le système dans mes classes car je découvrais le système de classe dans PHP et l'autocomplétion, tu peux te la mettre bien profond, parce qu'elle ne voit pas la variable privée $_machin (logique) et donc ne te propose pas $objet->machin. Et ça me gonfle royalement, pour chaque membre de la classe, tu dois aller voir dans la classe si tu t'es pas gouré. Et pour couronner le bazar, l'auteur du logiciel a transformé les noms des membres par rapport à la table SQL, donc au lieu d'avoir un $adherent->nom_adh (nom_adh étant la colonne SQL), tu dois mettre un $adherent->name (la vraie variable, c'est une privée $_name).Encore une fois, tout ça est issu des choix du développeur de ton appli qui a choisi les magic methods. Défini donc des getters/setters explicites dans tes entités, ça prend trois clics dans ton IDE et ça fera plaisir à l'autocomplete et à la phpDoc
PetitCalgonEnsuite le problème d'architecture de PHP c'est que les variables ne sont pas fortement typées, tu peux avoir une variable $n à qui tu vas affecté un chiffre, puis une string, puis un objet, puis un bool, il ne va jamais râler. Tu sais jamais à l'avance ce que tu vas avoirTu parles du typage dynamique qui n'est pas directement lié à PHP mais qu'on retrouve dans tous les langages de script. Python fait pareil et même les très hypes Ruby et Scala. On a aussi souvent reproché le typage faible (additionner une chaîne et un entier) à PHP alors que c'est l'une des principales raisons qui ont fait son succès en diminuant les barrières à l'apprentissage de la programmation. Il est clair que quand on prend du skill le typage faible est loin d'être un avantage.
PetitCalgonEt pour terminer sur ma comparaison .Net, forcément elle est biaisée, parce que ce que je fais, c'est de l'applicatif lourd, c'est pas du Web.PHP a un nombre de défauts historiques incalculable. En revanche je l'utilise, moi aussi, pour faire de "l'applicatif lourd", tout comme j'utilise Java EE et parfois (mais moins souvent, j'avoue) C#. C'est pas une question d'IDE ou de conception du langage, c'est une question de comment le développeur utilise les outils qu'on lui met à disposition. En PHP on peut faire de l'entity manager, de l'injection de dépendances (coucou Yaug, moi aussi j'fais du Symfony ), de l'architecture n-tiers, il me faut rien d'autre pour pondre une architecture qui tient debout et qui restera maintenable sur des années, même dans une "application lourde" qui implique des dizaines de composants orientés services.
Ce message a été modifié 3 fois.
Dernière modification : 4 octobre 2014
à 17:41 par
Fabe.
Fabe Défini donc des getters/setters explicites dans tes entités, ça prend trois clics dans ton IDE et ça fera plaisir à l'autocomplete et à la phpDocJ'en reviens à ce point: how ?
private $_name;
/**
* Gets or sets the name
**/
public property Name {
get { return $this->_name; }
set { $this->_name = $value; }
}
PetitCalgonJ'en reviens à ce point: how ?private $_name;
/**
* Gets or sets the name
**/
public property Name {
get { return $this->_name; }
set { $this->_name = $value; }
}
/** @var string */
private $name;
public function getName() {
return $this->name;
}
public function setName($name) {
$this->name = $name;
}
What else ?PetitCalgonBen oui, mais ça marche avec smarty ça?Je connais pas Smarty, mais on m'a dit qu'il était devenu moderne. Si il fonctionne comme la plupart des moteurs de templating, tu devrais pouvoir utiliser "membre.name", afin qu'il retombe naturellement sur le getter getName() (par convention de nommage).
Dans mon code Smarty, je met {$membre->getName()} ?
Je trouve ça très verbeux, je préfère la version "courte" {$membre->Name} (ou {$membre->name}. Is that possibeul?
Ce message a été modifié 1 fois.
Dernière modification : 8 octobre 2014
à 10:42 par
Tchou.
1996-2024 — Lexpage v4 — GPLv3 (sources)
page générée le 26 décembre 2024 à 04:23:59