Afficher les caractéristiques d'un objet

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Afficher les caractéristiques d'un objet

par zeus » 19 déc. 2007, 10:23

Merci Hubert pour ta reflexion.

La solution que nous avons retenue est de développer notre propre classe de log que nous allons affecter à Propel.
Vu que nous voulions aussi savoir combien de requête étaient exécutées à chaque get, on va utiliser cette classe.

Merci à tous

par Hubert Roksor » 18 déc. 2007, 20:44

je n'ai pas trouvé de quoi avancer sur PDO ...
Ce n'est pas PDO qu'il faut attaquer, ce serait plutôt Propel (même si on peut étendre PDO à la place). L'idée serait d'étendre la méthode qui exécute les requêtes pour garder trace de la dernière requête exécutée, mais en fait je viens de télécharger Propel et je vois que c'est déjà ce qu'ils font afin de logger les requêtes. Vu dans runtime/classes/propel/util/PropelPDO.php:
public function prepare($sql, $driver_options = array())
{
	Propel::log($sql, Propel::LOG_DEBUG);
	return parent::prepare($sql, $driver_options);
}
...donc logiquement il y a un log quelque part à partir duquel tu devrais pouvoir récupérer ta requête. Au pire, tu peux émuler la méthode qui a disparu
public function prepare($sql, $driver_options = array())
{
	$this->lastExecutedQuery = $sql;
	Propel::log($sql, Propel::LOG_DEBUG);
	return parent::prepare($sql, $driver_options);
}

private $lastExecutedQuery;
public function getLastExecutedQuery()
{
	return $this->lastExecutedQuery;
}
Tout ça c'est en imaginant que toutes les requêtes de Propel passent par la même méthode (ce qui ne semble pas le cas pour certaines d'entre elles :?). Sinon, essaie d'étendre PDO directement.

par zeus » 18 déc. 2007, 18:32

Merci à vous pour cette fonction ... ça faisait un moment que je la cherchais :pouce:

Sinon, même avec cette fonction, je n'ai pas trouvé de quoi avancer sur PDO ...
Si quelqu'un à une autre idée, je suis preneur ;)

par titerm » 18 déc. 2007, 18:00

A partir du nom de la class ou d'une instance, le get_class_methods() devrait répondre a tes besoins

Grillé d'une 1/2 seconde, du coup je complete...

Tu peux aussi t'appuyer sur la classe Reflection

par dimalta5 » 18 déc. 2007, 17:58

ceci devrait faire l'affaire je crois get_class_methods ( mixed $class_name )

Afficher les caractéristiques d'un objet

par zeus » 18 déc. 2007, 17:42

Bonjour,

Dans un de mes développements actuels, j'utilise Propel 1.3b2 qui est basé sur PDO.

Une de mes requêtes ne me retourne pas le résultat escompté et je désire afficher la requête réellement exécutée pour savoir si ce sont mes données qui cause le soucis ou s'il s'agit de la requête.

si je tente d'afficher la requête générée par le criteria ($c->toString()), je ne suis pas sûr d'obtenir la bonne requête, je désires donc obtenir la requête réellement exécutée.
En gros, l'équivalent de l'écriture
Propel::getConnection()->getLastExecutedQuery()
lorsque Propel utilisait encore Créole.

Si vous ne savez pas répondre à ma 1ere question mais que vous connaissez un moyen d'afficher les méthodes publiques d'un objet à partir d'une de ses instances, vous pourrez tout de même m'aider ;)