Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/07/2011, 15h07   #1
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Par défaut classe étendant Zend_Db_Table_Abstract

Bonjours,

Je suis en pleine reflexion, et j'essaye de comprendre comment fonctionne la gestion de la base de donné.

Citation:
Chaque table doit avoir sa classe étendant Zend_Db_Table_Abstract, comme décrit dans Définir une classe de Table.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
    class Accounts extends Zend_Db_Table_Abstract
    {
        protected $_name            = 'accounts';
        protected $_dependentTables = array('Bugs');
    }
 
    class Products extends Zend_Db_Table_Abstract
    {
        protected $_name            = 'products';
        protected $_dependentTables = array('BugsProducts');
    }
 
    class Bugs extends Zend_Db_Table_Abstract
    {
        protected $_name            = 'bugs';
 
        protected $_dependentTables = array('BugsProducts');
 
        protected $_referenceMap    = array(
            'Reporter' => array(
                'columns'           => 'reported_by',
                'refTableClass'     => 'Accounts',
                'refColumns'        => 'account_name'
            ),
            'Engineer' => array(
                'columns'           => 'assigned_to',
                'refTableClass'     => 'Accounts',
                'refColumns'        => 'account_name'
            ),
            'Verifier' => array(
                'columns'           => array('verified_by'),
                'refTableClass'     => 'Accounts',
                'refColumns'        => array('account_name')
            )
        );
    }
 
    class BugsProducts extends Zend_Db_Table_Abstract
    {
        protected $_name = 'bugs_products';
 
        protected $_referenceMap    = array(
            'Bug' => array(
                'columns'           => array('bug_id'),
                'refTableClass'     => 'Bugs',
                'refColumns'        => array('bug_id')
            ),
            'Product' => array(
                'columns'           => array('product_id'),
                'refTableClass'     => 'Products',
                'refColumns'        => array('product_id')
            )
        );
 
    }
A part protected $_name = 'accounts'; qui sert a definir le nom de la table.
Et si on met rien le nom de la classe et prise comme nom de classe.

Vous pourriez m'expliquer a quoi sert le reste ?

Merci
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 15h45   #2
Membre confirmé
 
Avatar de Nighty
 
Homme Lucas CORBEAUX
Chef de projet MOE
Inscription : février 2003
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Lucas CORBEAUX
Âge : 28
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet MOE

Informations forums :
Inscription : février 2003
Messages : 158
Points : 291
Points : 291
Pour la version longue, il faut aller du côté de la doc : http://framework.zend.com/manual/en/...tionships.html

Pour la version courte $_dependentTables est un tableau des classes (important : c'est le nom de la classe qu'il faut mettre ici, pas de la table) qui sont "dépendantes" de la table que tu définis.

Par exemple, comme il y a une clé étrangère vers la table accounts dans bugs, Bugs apparaît dans le tableau $_dependentTables de la table Accounts.

Ca permet de récupérer les objets dépend d'un Zend_Db_Table_Row via une méthode "magique" find*(), ex :

Code :
1
2
3
4
5
6
7
$table = new Accounts();
$account = $table->find(1)->current();
$bugs = $account->findBugs();
 
foreach ($bugs as $bug) {
// Do something with $bug
}
$_referenceMap permet de traiter "l'autre sens" de la relation : récupérer une row "parente". La syntaxe est plus compliquée car il faut donner un nom à la règle, nommer la table, la clé primaire dans la table parente et la clé étrangère dans la table dépendante.

Par exemple, en définissant le $_referenceMap dans Bugs comme dans l'exemple, on peut accéder au compte utilisateur via une méthode "magique" findParent*().

Code :
1
2
3
$table = new Bugs();
$bug = $table->find(1)->current();
$account = $bug->findParentAccounts();
Comme tu peux le voir dans la définition, il y a deux clés vers la table Accounts, et donc deux règles : Engineer et Reporter. La précédente façon de faire va prendre la règle "par défaut" (la première dans le tableau), mais on peut préciser quelle règle utiliser avec findParent*By*().

Code :
1
2
$reporter = $bug->findParentAccountsByReporter();
$engineer = $bug->findParentAccountsByEngineer();
Reste plus que les relations ManyToMany qui sont permises avec des méthodes magiques find*Via*(). Exemple, retrouver les produits pour un bug :

Code :
1
2
3
$table = new Bugs();
$bug = $table->find(1)->current();
$products = $bug->findProductsViaBugsProducts();
Comme mentionné dans la doc, ces méthodes "magiques" sont des alias vers des méthodes existantes (findDependentRowset, findParentRow et findManyToManyRowset) que tu peux préférer d'utiliser si tu les trouve plus parlantes.

Si tu n'as à te rappeler que d'une chose de tout ça, c'est que chacune de ces méthodes entraine un appel à la base de données... Il faut donc s'en servir en connaissance de cause, et souvent avec parcimonie.
Nighty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 16h16   #3
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Ok donc pour bien comprendre tous sa je vais essayer de creer mon menu dynamique (recuperer les nom et url dans une BDD) etape par etape en m'inspirant de votre experience et assayer de prendre de bonne habitude

Actuellement tu me parles de plein de chose et je suis pas encore apte a comprendre.

Donc pour mon menu voici la table (provisoire, et simplifié) :
Code :
1
2
3
4
5
6
7
8
9
10
 
Structure :
id : incrementer
##############
# ID # name # url  #
##############
--Contenu--
##############
#  1 # lien 1 # lien #                       #
##############

Pour expliquer ma configuration voci un petit resumer :
- Utilisation d'un layout (APPLICATION_ROOT / layouts / scripts / layout.phtml)

Dans layout.phtml j'inclus la page (APPLICATION_ROOT / modules / default / views / scripts / template / top / menu / menu.phtml)

Donc si vous comprenez bien menu.phtml contien mon menu qui va etre dynamique.

Premierement je commence par quoi ?
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 21h36   #4
Membre confirmé
 
Avatar de Nighty
 
Homme Lucas CORBEAUX
Chef de projet MOE
Inscription : février 2003
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Lucas CORBEAUX
Âge : 28
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet MOE

Informations forums :
Inscription : février 2003
Messages : 158
Points : 291
Points : 291
En toute honnêteté, je ne pense pas que commencer par un menu dynamique soit la façon la plus simple de commencer à utiliser Zend_Db : des exemples simples de CRUD permettront de débuter plus sereinement, en ajoutant petit à petit des relations et des formulaires plus complexes.

Si vraiment le menu est une priorité, je ferais comme ça :
- Exécuter une requête pour ramener tous les éléments de la table.
- Transformer les données de la requête en un tableau (ou un Zend_Config) pouvant être lu par un objet Zend_Navigation.
- Utiliser Zend_Navigation dans le layout pour afficher mon menu.

Du reste, il faut que tu prennes le temps de lire la doc pour chaque module que tu veux utiliser (Zend_Db et Zend_Navigation...) et que tu n'hésites pas à jeter un oeil dans le source pour voir comment ça fonctionne, c'est une des (sinon la) meilleures façons de lever un doute ou de répondre à ses questions.
Nighty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 22h02   #5
Membre habitué
 
Avatar de thebarbarius
 
Inscription : octobre 2008
Messages : 745
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 745
Points : 139
Points : 139
Vous parlez comme si je demandé de faire quelque chose d'ultra compliqué !

Je rappel que justement j'ai le menu parcque iln'ya rien de plus simpls.

En php normal se serai juste une petite boucle while qui liste tous.
thebarbarius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h08.


 
 
 
 
Partenaires

Hébergement Web