Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-01-2009 14:28:44

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

[Débutant] Quelques questions bien ciblées pour commencer !

Bonjour à toutes et à tous !

Me voilà re-lancé dans l'apprentissage de ce framework après un échec lié à mon manque d'expérience en OO.
J'ai maintenant acquis pas mal de choses et je penses enfin que le framework de Zend va pouvoir me faire gagner du temps.

Voilà quelques questions:

1/-structure générale:
Comment fait-on pour structuré un site avec une structure plus profonde que simplement 1 controller + une action?
je m'explique, j'aimerais avoir une url de type http://monSite.fr/back/client/index.htm
Il y a donc 1 couche supplémentaire, comment implémenter cela comme il le faut dans les controller etc pour satisfaire le modèle MVC de base ?

2/-bonne utilisation de Zend_Db
J'ai noté différentes manières d'utiliser la classe Zend_Db
-Zend_Db_Table
-Zend_Db_Statement
-Zend_Db_Select

Est-ce une bonne pratique de toujours passer par Zend_Db_Table?
Il me semble que toutes ces classes sont étroitement liées, pouvez vous me mettre en garde contre certain abus de cette classe ?

3/-Zend_Db_Table, petit détail
J'ai crée une classe Users qui étend Zend_Db_Table_Abstract, et le fonctionnement de base est bien là.
Seulement je désire maintenant ne pas afficher dans mon cas, par exemple le timestamp de la date de naissance, mais effectué la conversion en amont de l'affichage.
-Dois je creer une méthode public getBirthday() dans la classe Users?
-Si oui, comment lui fournir la colonne à transformer ?
-Il me semble que new Users(); renvoi un objet de type Zend_Db_Table_Rowset, faut il créer une classe à part pour les méthodes liées au traitement de ces colonnes?

D'autre part, la méthode fetchAll(); me renvoie bien le contenu de ma table, mais aussi la structure entière de celle ci, est-ce normal? faut-il utiliser fetcRow pour pallier ce problème?


4/-créer un environnement administrateur étanche
Je voudrais créer une partie du site totalement disjointe de l'application principale, faut-il pour cela créer une nouvelle application?
Si oui, pour y accéder il suffirai simplement de se connecter sur une page de l'application principale, qui modifierai la variable d'environnement afin de changer le répertoire des controller etc...
Ou faut-il créer un module au sein de l'application principale, et si oui comment organiser les nouveaux controlleurs etc


Je remercie d'avance les personnes qui auront le courage de répondre à ces questions, cela me permettra d'avancer bien dès le début!

Encore MERCI !

Hors ligne

 

#2 20-01-2009 15:47:19

nuranto
Membre
Date d'inscription: 20-01-2009
Messages: 24

Re: [Débutant] Quelques questions bien ciblées pour commencer !

Salut!

Je suis débutant aussi, mais pour le 1/ et le 4/, je pense que tu trouveras ton bonheur avec les modules.

Je te conseille de lire ce tutoriel, qui explique pas mal de choses (modules (part5), Auth et Acl, Layouts, etc..)

http://blog.astrumfutura.com/archives/3 … sited.html

Hors ligne

 

#3 20-01-2009 16:48:13

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [Débutant] Quelques questions bien ciblées pour commencer !

Merci pour ce lien de qualité, je vais jeter un oeil dès que possible.

Quand à mon (2/-), j'ai constaté qu'effectivement on passai toujours par Zend_Db_Table pour gérer les requêtes.

Hors ligne

 

#4 20-01-2009 20:23:26

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Débutant] Quelques questions bien ciblées pour commencer !

Bon je vais me répéter mais je pense que ça fais pas de mal.

il ne faut pas confondre Modèle et Persistance.
Le contrôleur assure la liaison entre la vue et le Modèle et porte la logique applicative CE que l'on fait des objets manipulés.
Le modèle porte la logique métier donc le QUOI la logique propre des objets manipulés
La persistance porte la logique de persistance des objets manipulé Comment on les garde.

Donc ton application manipule des utilisateur User est donc une classe métier et tu dois y mettre les méthode de manipulation d'un utilisateur. calculer l'age de la retraite par exemple

Tes utilisateurs doivent être enregistrés pour cela tu peux le faire dans une fichier il te faut donc un Users_File qui se charge d'enregistrer et lire des User, dans un annuaire et alors ce sera un User_Ldap_Node ou encore une base et donc un User_Table

Le formatage de la date NE DOIT PAS être fait par la couche persistance. il est du ressort de la vue.
le fonctionnement est le suivant
la couche persistance lit et écrit les dates au format supporté par l'espace de stockage dans ton cas le timestamp
Elle transforme ses date dans le format métier et vice versa lorsqu'elle place les donnés dans les objets métiers ou les récupère.
Le métier utilise son propre forma de date integer string objet Date
Le contrôleur pour sa part assure la transformation du format du métier vers un format compréhensible de la vue.
La vue format les dates pour les présenter à l'utilisateur

dans ce shémas théorique on peut par exemple trouver dans le métier des méthode de conversion de format.
par exemple getISOBirthDay() getSQLBirthDAy() mais ce n'est normalement pas de son ressort.

le mieux dans ce cas là est de définir une classe Date et de l'utiliser dans le métier ainsi le getter getBirthDay retourne toujours un objet Date ainsi que ce soit la couche persistance ou le contrôleur ou même la vue il peuvent invoquer les méthode de conversion ou de formatage de leur choix.

A+JYT

Hors ligne

 

#5 21-01-2009 16:57:00

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [Débutant] Quelques questions bien ciblées pour commencer !

Re !

J'ai comme prévu commencé la fabrication de mon propre système de CRUD, je penses que c'est un excelent entraînement !

Je tiens à te remercier sekaijin, pour le partage de ton savoir qui m'aide beaucoup.

Je commence vraiment à zéro dans ce projet en m'appuyant sur ce que tu as fais.

Petit problème:
voici mon controleur

Code:

<?php

require_once 'Zend/Controller/Action.php';

class ClientController extends Zend_Controller_Action {
    
    
    public function indexAction() {        
        $client = new Model_Client();
    
        $this->view->variable = $client->newClient()->toStdClass();

    }

}
?>

Ma méthode toStdClass() fonctionne sur un objet de type row, mais pas sur les objets rowset.
Quand j'essaye d'afficher "variable" dans index.phtml lors du traitement d'un rowset par la méthode toStdClass, cela m'affiche une page blanche, mêmes les echos de test ne s'affichent plus alors qu'ils sont directement placés en dure dans index.phtml.

Merci

[edit]: j'ai trouvé l'erreure, simple problème avec mon require once de ma classe Model_Client_Rowset qui bloquait tout.

Dernière modification par squall6969 (21-01-2009 17:05:18)

Hors ligne

 

#6 22-01-2009 10:16:07

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [Débutant] Quelques questions bien ciblées pour commencer !

J'ai bien avancé dans la création de mon crud, voici quelques questions:
-je ne comprends pas l'écriture synthaxique suivante:

Code:

$items = $this->model->{$this->_getList}($nameStart);
//que signifie les crochets, les parenthèse ? concaténation?

1/-Comment faire en sorte, de manière propre, que l'url de mon backoffice commence par back, par exemple:
http://www.monsite.fr/back/client/show-list

2/-Comment faire pour injecter dynamiquement du javascript de manière propre dans un formulaire, il faut le faire dans le header non?

3/-Voici une question qui me bloque vraiment dans ma progression, si j'ai une table client et une table adresse liée à la table client par la clé primaire adresse_id, comment faire pour récupérer proprement les adresses liées au client et par exemple compter le nombre d'adresses afin d'afficher dans la liste des clients: "3 adresses"

4/-Les requêtes de type fetchAll récupère un rowset ce qui m'à l'air énorme pour afficher seulement quelques infos de la table, quel est la bonne stratégie pour optimiser les requêtes?

Une fois que j'aurais résolu ces problèmes, j'essaierais d'intégrer une pagination à l'aide de Zend_Paginator


Si vous pouviez répondre en priorité à la question 3/- je vous en serais très reconnaissant !

Quand j'aurais créer un crud fonctionnel je partagerai mes sources afin de subir vos critiques !


MERCI

Hors ligne

 

#7 22-01-2009 11:37:14

nuranto
Membre
Date d'inscription: 20-01-2009
Messages: 24

Re: [Débutant] Quelques questions bien ciblées pour commencer !

Hors ligne

 

#8 22-01-2009 13:13:43

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [Débutant] Quelques questions bien ciblées pour commencer !

Merci pour ce lien très pertinent, il répond tout à fait à mon attente.

Je vais voir comment intégrer tout sa dans l'après midi.


Encore merci

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages