1. Trang chủ
  2. » Công Nghệ Thông Tin

Pratique de MySQL et PHP- P79 pps

5 115 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 145,76 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Un contrơleur hérite donc des propriétés de cette super-classe, notamment de $this->view qui est le composant Vue avec lequel nous pouvons produire le document résultat.. On peut placer

Trang 1

∗ Q u e l q u e s i n f o r m a t i o n s s u r l a c o n f i g u r a t i o n

∗ /

f u n c t i o n c o n f i g A c t i o n ( )

{

$ t h i s−>view−>t i t r e _ p a g e = " Contenu du f i c h i e r de

c o n f i g u r a t i o n " ;

/ / On p r e n d l a c o n f i g u r a t i o n d a n s l e r e g i s t r e , on l a m e t d a n s / / l a v u e

$ r e g i s t r y = Z e n d _ R e g i s t r y : : g e t I n s t a n c e ( ) ;

$ t h i s−>view−>c o n f i g = $ r e g i s t r y −>g e t ( ’ c o n f i g ’ ) ; ;

}

}

On remarque d’abord que tout contrơleur est une sous-classe de Zend_Controller_Action Un contrơleur hérite donc des propriétés de cette super-classe, notamment de $this->view qui est le composant Vue avec lequel nous pouvons produire le document résultat On peut placer des informations dans

la vue avec une affectation $this->view->nom = valeur.

On peut se demander d’ó vient le fragment HTML qui constitue la page d’ac-cueil du site ZSCOPE, produite par cette action Dans le Zend Framework, beaucoup

de décisions s’appuient sur des conventions de nommage et d’emplacement, ce qui évite de se répéter La convention pour les vues est la suivante : Le fragment (ou

script) associé à une action nommée act du contrơleur ctrl se trouve dans le

répertoire views/scripts/ctrl, et se nomme act.phtml Ici, l’action index se conclut

donc automatiquement par l’exécution du scriptviews/scripts/index/index.phtml

Vous pouvez consulter ce fichier Il contient le code HTML qui s’affiche dans la zone principale de la page d’accueil de ZSCOPE Tout le reste de la page, incluant

le logo, le menu, les différents tableaux imbriqués spécifiant le positionnement des

différentes parties et notamment de la zone principale d’affichage, relève du layout.

La gestion de ce dernier sera présentée page 376

Prenons un autre exemple avec l’action configAction() du contrơleur Index (voir ci-dessus) Le code est très simple : on récupère dans le registre l’objet de configuration et on l’affecte à la vue

La vue, un script PHP un peu spécial, est alors exécutée Au sein de ce script

on dispose de l’objet $config que l’on vient d’affecter, ainsi que de la chaỵne de caractères titre_page

Exemple 9.4 zscope/application/views/scripts/index/config.phtml : Le script Vue de l’action config

du contrơleur Index

V o i c i q u e l q u e s i n f o r m a t i o n s e x t r a i t e s du f i c h i e r de c o n f i g u r a t i o n

<h4> I n f o r m a t i o n s g é n é r a l e s s u r l ’ a p p l i c a t i o n < / h4>

Trang 2

< o l >

< l i >Nom de l ’ a p p l i c a t i o n : <? php echo $ t h i s−>c o n f i g −>app−>name ;

? > </ l i >

< l i > A f f i c h a g e d e s e r r e u r s : <? php echo $ t h i s−>c o n f i g −>app−>

d i s p l a y _ e r r o r s ; ? > </ l i >

< l i > A d m i n i s t r a t e u r : <? php echo $ t h i s−>c o n f i g −>app−>admin_mail ;

? > </ l i >

</ o l >

<h4>Connexion à l a b a s e de d o n n é e s < / h4>

< o l >

< l i > P i l o t e PDO : <? php echo $ t h i s−>c o n f i g −>db−>a d a p t e r ; ? > </ l i >

< l i > S e r v e u r : <? php echo $ t h i s−>c o n f i g −>db−>params −>h o s t ; ? > </ l i

>

< l i > B a s e : <? php echo $ t h i s−>c o n f i g −>db−>params −>dbname ; ? > </ l i

>

< l i > L o g i n : <? php echo $ t h i s−>c o n f i g −>db−>params −>username ;

? > </ l i >

</ o l >

On programme dans la vue comme dans n’importe quel script PHP, avec la particularité que les données « dynamiques » sont disponibles dans l’objet $this parce qu’elles ont été placées là par l’action associée à la vue Le script-vue ne sert qu’à mettre en forme ces données, pas à les créer ou les modifier Nous reviendrons sur la gestion de la vue dans le Zend Framework page 376

Le moment est probablement venu pour vous de faire une pause Parcourez l’arborescence des fichiers, et modifiez ceux qui interviennent dans l’exécution de l’action index du contrôleur Index Il s’agit de controllers/IndexControlller.php et views/s-cript/index/index.phtml Clarifiez les interactions entre ces compoants (contrôleur, action

et vue : nous n’avons pas encore vu le modèle) La suite revient plus longuement sur les composants Zend relatifs au MVC et aux bases de données

9.2 ACCÈS À LA BASE DE DONNÉES

Le contrôleur bd de l’application ZSCOPEmontre comment utiliser la connexion à

la base, instance de Zend_Db_Adapter, pour accéder classiquement à une base de données par des requêtes SQL Sur ce point, le ZF s’appuie très largement sur PDO (voir page 238) qui propose déjà tout ce qui est nécessaire à un accès normalisé aux bases relationnelles Ce qui suit n’est donc qu’une introduction assez rapide, que vous pouvez compléter avec la documentation PDO en ligne

Trang 3

9.2.1 Interrogation

La méthode query() prend une requête et retourne une instance de Zend_Db_Statement qui permet de parcourir le résultat Le mécanisme est totalement standard et conforme à ce que nous utilisons depuis le début du livre

Voici l’action queryfetch() qui interroge la table Film.

f u n c t i o n q u e r y f e t c h A c t i o n ( )

{

/ / On r é c u p è r e l a c o n n e x i o n d a n s l e r e g i s t r e

$bd = Z e n d _ R e g i s t r y : : g e t I n s t a n c e ( )−>g e t ( ’ db ’ ) ;

/ / E x é c u t i o n d e l a r e q u ê t e

$ r e s u l t =

$bd−>que r y ( "SELECT id , t i t r e , annee FROM Film WHERE annee

> 1980 " ) ;

/ / I t é r a t i o n s u r l e s f i l m s

$ t h i s−>view−>f i l m s = a r r a y ( ) ;

w h i l e ( $ f i l m = $ r e s u l t−>f e t c h ( Zend_Db : : FETCH_OBJ) ) {

$ t h i s−>view−>f i l m s [ ] = $ f i l m ;

}

}

Essentiellement, on interroge la base, puis on itère sur le résultat en plaçant chaque objet dans un tableau de $this->view Le paramètre de la méthode fetch() indique le format dans lequel on souhaite récupérer chaque ligne Comme d’habitude, au lieu d’OBJ, on peut utiliser ASSOC pour des tableaux associatifs, NUM pour des tableaux indicés, et quelques autres options moins utiles Le script de vue parcourt ce tableau et crée le document HTML de présentation Notez la méthode escape() de la vue qui s’assure que les caractères perturbant le document HTML sont neutralisés

Exemple 9.5 zscope/application/views/scripts/bd/queryfetch.phtml : La vue affichant la liste des films

V o i c i l a l i s t e d e s f i l m s t r o u v é s d a n s l a b a s e

< o l >

<? php f o r e a c h ( $ t h i s−>f i l m s a s $ f i l m ) { ? >

< l i > <? php echo $ t h i s−>e s c a p e ( $film −> t i t r e ) ; ? > </ l i >

<? php } ? >

</ o l >

En général, on utilise des requêtes contenant des paramètres venant de formu-laires ou autres, qu’il faut prendre garde d’échapper pour éviter les caractères posant problème Les méthodes quoteInto() et quote() effectuent cet échappement en tenant compte des règles propres au serveur auquel on est connecté Ces régles

Trang 4

varient d’un SGBD à un autre Pour MySQL, nous savons qu’il faut placer une barre oblique inversée devant les « ’ », pour ORACLE il faut les doubler, etc Voici un exemple avec quoteInto()

f u n c t i o n q u o t e A c t i o n ( )

{

/ / On r é c u p è r e l a c o n n e x i o n d a n s l e r e g i s t r e

$bd = Z e n d _ R e g i s t r y : : g e t I n s t a n c e ( )−>g e t ( ’ db ’ ) ;

/ / Le t i t r e du f i l m c h e r c h é

$ t i t r e = " J e a n n e d ’ Arc " ;

$ t h i s−>view−> t i t r e = $ t i t r e ;

/ / P r é p a r a t i o n d e l a r e q u ê t e

$ r e q u e t e = $bd−>q u o t e I n t o ( "SELECT ∗ FROM Film WHERE t i t r e =? " ,

$ t i t r e ) ;

$ r e s u l t = $bd−>que r y ( $ r e q u e t e ) ;

/ / I t é r a t i o n s u r l e s f i l m s

$ t h i s−>view−>f i l m s = a r r a y ( ) ;

w h i l e ( $ f i l m = $ r e s u l t−>f e t c h ( Zend_Db : : FETCH_OBJ) ) {

$ t h i s−>view−>f i l m s [ ] = $ f i l m ;

}

}

Il existe tout un catalogue de méthodes fetch pour récupérer, au choix, toutes les lignes d’un résultat, ou bien sa première ligne, ou bien la première colonne de sa première ligne, etc Voici l’action fetch qui vous donnera une idée de l’utilisation

de ces méthodes La documentation de Zend sur le composant Zend_Db détaille la liste de toutes les possibilités

/ ∗ ∗

∗ Q u e l q u e s m é t h o d e s f e t c h ∗∗∗ d e f Zmax_Db_Adapter

∗ /

f u n c t i o n f e t c h A c t i o n ( )

{

/ / On r é c u p è r e l a c o n n e x i o n d a n s l e r e g i s t r e

$bd = Z e n d _ R e g i s t r y : : g e t I n s t a n c e ( )−>g e t ( ’ db ’ ) ;

/ / Tous l e s f i l m s c o n t e n a n t un ’ v ’ ,

$ r e q u e t e = " SELECT t i t r e , annee , g e n r e FROM F i l m WHERE t i t r e LIKE ’%v%’ " ;

$ t h i s−>view−>r e q u e t e = $ r e q u e t e ;

/ / A t t e n t i o n , on v e u t t o u j o u r s r é c u p é r e r d e s o b j e t s

$bd−>setFetchMode ( Zend_Db : : FETCH_OBJ) ;

/ / F e t c h : comme un t a b l e a u d ’ o b j e t s

$ t h i s−>view−>f i l m s = $bd−>f e t c h A l l ( $ r e q u e t e ) ;

/ / On p r e n d u n e s e u l e l i g n e , l a p r e m i è r e du r é s u l t a t

$ t h i s−>view−>f i l m = $bd−>fetchRow ( $ r e q u e t e ) ;

Trang 5

/ / On p r e n d u n e v a l e u r d a n s u n e l i g n e

$ t h i s−>view−> t i t r e = $bd−>fetchOne ( $ r e q u e t e ) ;

}

Avec ces méthodes fetch, l’exécution de la requête et la récupération du résultat s’effectuent en un seul appel Il est souvent pratique de pouvoir récupérer facilement une ligne ou une valeur spécifique dans la base de données

9.2.2 Insertion et mise à jour

Les modifications de la base, que ce soit insertion ou mises à jour, bénéficient également de méthodes génériques Ces méthodes effectuent automatiquement les échappements nécessaires pour s’assurer que les modifications s’exécutent sans pro-blème Voici l’action insert illustrant une insertion

/∗ ∗

∗ Comment i n s é r e r d a n s une t a b l e

∗ /

f u n c t i o n i n s e r t A c t i o n ( )

{

/ / On r é c u p è r e l a c o n n e x i o n d a n s l e r e g i s t r e

$bd = Z e n d _ R e g i s t r y : : g e t I n s t a n c e ( )−>g e t ( ’ db ’ ) ;

/ / On v e u t i n s é r e r l ’ E s p a g n e On co mmence p a r s u p p r i m e r

/ / s i e l l e e x i s t e d é j à

$bd−>que r y ( "DELETE FROM Pays WHERE code = ’ES ’ " ) ;

/ / M a i n t e n a n t on d é f i n i t l e t a b l e a u d e s d o n n é e s à i n s é r e r

$ e s p a g n e = a r r a y ( " c o d e " => " ES " , " nom " => " E s p a g n e " , " l a n g u e

" => " E s p a g n o l " ) ;

/ / On i n s è r e e t on r é c u p è r e l e n o m b r e d e l i g n e s i n s é r é e s

$ t h i s−>view−>n b _ l i g n e s = $bd−> i n s e r t ( " Pays " , $espagne ) ;

}

Pour être complet, voici le code d’une mise à jour

f u n c t i o n u p d a t e A c t i o n ( )

{

/ / On r é c u p è r e l a c o n n e x i o n d a n s l e r e g i s t r e

$bd = Z e n d _ R e g i s t r y : : g e t I n s t a n c e ( )−>g e t ( ’ db ’ ) ;

/ / T a b l e a u d e s c o l o n n e s à m o d i f i e r

$ u p d a t e _ v a l = a r r a y ( " l a n g u e " => " A n g l a i s US" ) ;

/ / C l a u s e w h e r e p o u r l a m o d i f i c a t i o n

$where [ ] = " c o d e = ’US ’ " ;

$ n b _ r o w s = $bd−>update ( " Pays " , $update_val , $where ) ;

}

Ngày đăng: 06/07/2014, 00:20

TỪ KHÓA LIÊN QUAN