Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Depuis une Classe externe j'ai besoin de faire appel à la base de donnée,
seulement je n'arrive pas à récupérer la config de celle-ci déclarée dans le global.php
global.php
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=name;hostname=localhost',
'username' => 'root',
'password' => '',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
),
);
cette config est bien récupérable depuis le module.php d'un module via le service manager.
cependant je ne sait pas comment faire pour la récupérer depuis une classe perso créée
ou même depuis un Helper de vue.
merci de votre aide
Hors ligne
Tu peux injecter la connexion ou le service manager comme tu veux depuis le module.php.
Hors ligne
en fait j'arrive déja à recuperer l'adapteur dans un controller depuis le SM
mais je ne sait pas comment faire depuis une classe externe
Hors ligne
J'appelle cette classe par une Factory de Singletons.
Pour le chargement de la conf, j'ai différentes confs en fonction de l'environnement (déclaré dans Apache -- dev, recette, production).
Adapte-la à ton cas et tes besoins.
[lang=php] namespace Tonnamespace; use Zend\Db\Adapter\Adapter as Zend_Adapter; class Adapter { private $adapter; private static $confDir = '/../../config/autoload'; public function __construct() { $env = getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'; $dir = __DIR__ . self::$confDir . '/database.' . $env . '.php'; $conf = include ($dir); $conf = $conf['db']; $this->adapter = new Zend_Adapter(array( 'driver' => $conf['driver'], 'dsn' => $conf['dsn'], 'user' => $conf['user'], 'pass' => $conf['pass'], 'driver_options' => $conf['driver_options'] )); } public function beginTransaction() { return $this->adapter->getDriver()->getConnection()->beginTransaction(); } public function query($sql) { return $this->adapter->query($sql); } public function getAdapter() { return $this->adapter; } public function commit() { return $this->adapter->getDriver()->getConnection()->commit(); } public function rollback() { return $this->adapter->getDriver()->getConnection()->rollBack(); } /** * quote value * * @param string|integer $v * @return string */ public function quoteValue($v) { return $this->adapter->platform->quoteValue($v); } /** * quote value * * @param string|integer $v * @return string */ public function quoteIdentifier($i) { return $this->adapter->platform->quoteIdentifier($i); } }
Dernière modification par Bouks (14-10-2012 17:29:12)
Hors ligne
Merci,
C'est très sympa de ta part, j'avais réussi depuis en récupérant le SM à la déclaration d'un Helper depuis le module.php.
Mais je vais étudier ta méthode qui me parait intéressante.
Merci à toi Bouks,
Hors ligne
C'est moche de nommer ces classes avec des "_". C'est contre les bonnes pratiques !
Hors ligne
Ouh que je suis vilain. Avoir mis un _ dans un alias.
Je vais me flageller pendant dix minutes pour payer ma forfaiture.
Hors ligne
Tu fais comme tu veux, je fais juste la remarque pas la peine de monter sur tes grands airs ... Le fait est que ce forum est là pour préconiser les bonnes pratiques du ZendFramework 2 d'autant plus que les "_" font généralement référence au ZF1. Ca ne critique en rien ton travail juste pour informer la personne à qui tu proposes une solution de faire attention à cette information.
Information qui est présente ici : http://framework.zend.com/wiki/display/ … aceAliases
Hors ligne
J'espère que c'était sur le ton de l'humour (dans ce cas ça manque d'un petit smiley ) parce que sinon t'es vraiment très suceptible
Hors ligne
En parlant de bonnes pratiques.
Dans zf2 :
- le prependstylesheet (ou append...) prend le conditionnal en string
alors que
- le prependFile (...) prend le conditionnal en array
Dans PHP c'est pareil avec les signatures de fonctions dans un ordre, puis dans un autre...
alors un _ au lieu d'un -, on est plus à ça près.
Parfois j'ai envie de mettre des coups de boule à Rasmus Lerdorf.
Non.
Je vais plutôt le kidnapper et l'enfermer dans une cave pour qu'il corrige tout ce bazar.
Hors ligne
Salut Bouks,
Effectivement, pas besoin de t'exciter, la remaruqe d'Orkin était pertinente (d'autant plus que si tu contribues un jour à Zend Framework 2, plusieurs scripts sont automatiqueemnt lancés lorsque tu soumets ta correction, et notamment sur les conventions du framework ;-)).
Maintenant, il est fort propable que certains arguments ne soient pas toujours dans le même ordre, et effectivement c'est dommage. On ne peut pas le changer actuellement dans ZF 2 car cela entraînerait des problèmes de compatibilités, mais n'hésite pas à ouvrir une issue sur GitHub afin que ça soit corrigé pour Zend Framework 3 .
Hors ligne
Par rapport à la demande initial j'ai un peu la même question.
Dans un controller on récupére un Service avec :
$sm = $this->getServiceLocator(); $this->monService = $sm->get('monService');
Est-ce que c'est possible de faire la même chose dans une classe métier ?
Je pense que c'est ce que demandé à la base Zacharias, récupérer l'adaptater à sa base avec :
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
Hors ligne