Sujet : Hoa_Database / getInstance / configuration centralisée

Bonsoir,
Petite question, sur Hoa_Database et ses instances de connexion
Pour l'instant, dans les modules qui requiert un accès bdd, je colle ce code en haut:

<?php

import('Database.Dal.~');

/**
 * On se connecte à notre base de données.
 */
$db = Hoa_Database_Dal::getInstance(
    'mysql',
    Hoa_Database_Dal::PDO,
    'mysql:host=localhost;dbname=****',
    'root',
    '****'
);

$db->query("SET NAMES 'utf8'");

Et ensuite, je fait appel à la méthode getLastInstance()...
ça fonctionne bien!

Mais j'aimerais centraliser cet ensemble de commande, sans pour autant ouvrir une connexion bdd quand elle n'est pas requise...
Parceque toutes les actions et modules de mon application n'ont pas besoin de la bdd.
Je précise qu'on à affaire à une seule connection pour une seule base de donnée sur toute l'application!
Donc je suppose que le premier pas, c'est déjà un fichier de configuration afin de faciliter la mise en production: "Mais comment qu'on fait?" (Json?xml? etc...)

Ensuite, pour ce qui est de l'import, de la première instance, et de la requête "SET NAMES" ? Comment faire?

Merci d'avance pour les réponses wink

2

Re : Hoa_Database / getInstance / configuration centralisée

Hey,

tu peux setter ta conf dans les fichiers de configuration

fichier: Data/Etc/Configuration/HoaDatabase.json

        "connection.list.default.dal"     : "Pdo",
        "connection.list.default.dsn"     : "mysql:host=localhost;dbname=****",
        "connection.list.default.username": "****",
        "connection.list.default.password": "****",
        "connection.list.default.options" : [],

        // tu peux ajouter une autre connexion si besoin
        "connection.list.maconnxion.dal"     : "Pdo",
        "connection.list.maconnxion.dsn"     : "mysql:host=localhost;dbname=****",
        "connection.list.maconnxion.username": "****",
        "connection.list.maconnxion.password": "****",
        "connection.list.maconnxion.options" : [],

Une fois ce fichier modifié, ouvre ta console et tape une petite commande pour générer la nouvelle configuration.

        > hoa configuration:cache

Si tu as pas encore essayé la console (tu rates tongue) c'est le moment ! sinon tu peux changer la configuration à la mano directement dans les fichiers de cache générés dans Data/Etc/Configuration/.Cache/HoaDatabase.php

Pour le set names utf-8, il y a peu etre moyen de lui donner un charset dans les options mais je n'ai pas encore regardé par la.
Hywan va nous en dire un peu plus sur ces fameuses options.

Voilou ^^

Dernière fois dit par tetardo (29 Jan. 2010 20:06)

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !

Re : Hoa_Database / getInstance / configuration centralisée

Tiens, peut-être une piste en faisant ça?

"connection.list.default.dal"     : "Pdo",
        "connection.list.default.dsn"     : "mysql:host=localhost;dbname=****",
        "connection.list.default.username": "****",
        "connection.list.default.password": "****",
        "connection.list.default.options" : [],
        "connection.autoload" : "default"

Non, comme ça plus besoin d'appeler getInstance() une première fois, seulement getLastInstance() ?
Et pour la requête utf8, je sais pas trop comment il n'y aurais pas moyen d'éxécuter un bout de code (module,fonction,classe...) à la connexion?

Merci d'avance!

Re : Hoa_Database / getInstance / configuration centralisée

Après test, ça fonctionne!
Reste plus qu'a caser mon utf8 quelque part...
Peut-être un module qui ne contiendrai que l'import d'Hoa_Database et cette requête?
Et je me sert ensuite d'importModule() ?

5

Re : Hoa_Database / getInstance / configuration centralisée

Hey,

Je me suis bricolé un module simple avec 2 méthodes: database et session
Sur ce module j'ai ajouté un fichier de config ou je set dedans toutes les infos du genre nom du site, url, mail de contact, version etc...

Un truc du genre (un peu a l'arrache, et zoooouu !)

class Hoathis_Application implements Hoa_Framework_Parameterizable {

    // paramètres
    private $_parameters = null;
    private $options = array();

    // objects
    private $_db = null;

    /**
     * Constructeur
     */
    function __construct( $options = null ) {

        if ($options!==NULL)
            $this->options = explode(' ', trim(strtolower($options)));

        $this->_parameters = new Hoa_Framework_Parameter(
            $this,
            array(
                'mode' => 'debug'
            ),
            array(

                'session.name'       => 'SESSION',
                'session.lifetime'   => '68400',

                'locale.encoding'    => 'utf-8',
                'locale.lifetime'    => 'GMT+1',
                'locale.timezone'    => 'GMT+1',
                'locale.region'      => 'GMT+1',
                'locale.departement' => 'd/m/Y',
                'locale.date'        => 'H:i:s',
                'locale.time'        => 'd/m/Y H:i:s',

                'application.name' => '',
                'application.description' => '',
                'application.version' => '',

                'compagny.name' => '',
                'compagny.description' => '',
                'compagny.url' => '',

                'host.default.domain' => '',
                'host.default.path' => '',
                'host.default.directory' => '',

                'host.public.domain' => '',
                'host.public.path' => '',
                'host.public.directory' => ''

                'ta config au choix...' => 'bla bla bla...'
            )
        );

         
        // Par exemple c'est le genre d'info a reprendre du fichier de config Hoathis_Application.json...
        // Mais bon, peu être que Hywan va bientot (^^) nous ajouter la config des locales dans un fichier Hoa_Locale.json
        // A voir...
        setlocale(LC_TIME, 'fr_FR.utf8', 'fra');
 
        // ici on traite suivant un mode (production, dev, etc..) quoi faire
        // par exemple, page de maintenance, traitement des remontées d'erreurs, au choix....
        $this->loadMode();

        if (!in_array('nosession', $this->options)) {
            $this->loadSession();
        }

        if (!in_array('nodatabase', $this->options)) {
            $db = Hoa_Database_Dal::getInstance('default');
            $db->query("SET NAMES 'utf8'");
            // ou tu vas directement chercher une méthode comme pour la session
            // $this->loadDatabase();
        }
    }

..... tu te doute de la suite je pense
- les methodes sessions et database
- les methodes obligatoires pour bien implémenter avec Hoa_Framework_Parameterizable

du coup tu lances en fesant

importModule('Application.~');

$application = new Hoathis_Application();
ou
$application = new Hoathis_Application('nodatabase');
ou
$application = new Hoathis_Application('nodatabase nosession');
ou
...

Si tu veux le reste de la classe, redemande... mais je te conseil de la construire toi même, c'est pas bien compliqué...

tu peux aussi brancher ton objet application à ton routeur pour le récupérer dans tous tes controleurs.
Donc dans ton bootstrap tu vas avoir:

$controller->attachObject('application', $application);

et après dans tes controlleurs tu vas avoir:

public function IndexAction () {

       echo $this->application->getParameter('application.name');
}

Pratique,

Voilou ^^

Dernière fois dit par tetardo (28 Jan. 2010 22:06)

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !

6

Re : Hoa_Database / getInstance / configuration centralisée

Hey smile,

Je vois que vous vous débrouillez très bien sans moi, c'est nickel tongue.
Pour répondre à la question sur SET NAMES utf-8 : je n'en ai aucune idée. C'est censé faire quoi au juste ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

7

Re : Hoa_Database / getInstance / configuration centralisée

http://dev.mysql.com/doc/refman/5.0/en/ … ction.html

tout est la...

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !

8

Re : Hoa_Database / getInstance / configuration centralisée

On ne peut pas configurer ça en amont ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

9

Re : Hoa_Database / getInstance / configuration centralisée

si bien sur, si tu as la main sur ton fichier de conf. Ce qui n'est pas le cas de tout le monde (pour moi c'est bon tongue)

Dernière fois dit par tetardo (02 Feb. 2010 01:32)

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !

10

Re : Hoa_Database / getInstance / configuration centralisée

Effectivement comme le dit tetardo,
Il faut avoir un peu la main sur le serveur, ce que je n'aurais pas sur celui de production...
Donc faut que je case ça quelque part...
Je pourrais peut-être faire une classe étendue de Hoa_Database, avec simplement:

class Hoathis_Database_Utf8 extends Hoa_Database {

    private $db = null;

    public function getInstance(){
        if($this->db===null){
            $this->db = parent::getLastInstance();
            $this->db->query('SET NAME utf8');
        }
        return $this->db;
    }
}

Qu'est-ce que vous en dites?
(le code est fait de tête, donc il y a surement des fautes, mais pour le principe?)


Edit: Toujours pas de notification de réponse par mail... :-°

Dernière fois dit par jojolapine (02 Feb. 2010 08:53)