Zend Framework

De bricosoft
Aller à la navigation Aller à la recherche
Fichier:Zend-framework.png
Fichier:Willcodehtmlforfood.jpg
Un développeur Zend typique
Fichier:Tenzin Gyatzo foto 1.jpg
Un développeur Zend tel qu'il s'imagine être

Zend framework ou zf est un framework modèle-vue-contrôleur (ou pas) en/pour PHP 5+.

Erreur dans le widget Twitter Search: unable to write file /home/gbp4dt5/zones/bricosoft.com/www/extensions/Widgets/compiled_templates/wrt6938682581bab6_78318917
<google uid="C06" position="left"></google>

Il est livré chez toutes les bonnes distribs :

$ sudo apt-get install libzend-framework-php zend-framework

Scaffolding / echaffaudage

Une bonne pratique est de toujours garder la même structure d'application, l'échaffaudage permet de créer, voire refactoriser une arborescence d'application.

L'outil CLI s'appioche zf.sh ou zf.bat pour zindozs : <source lang="properties"> $ zf.sh

                         An Error Has Occurred                         
An action and provider is required.                                    

Zend Framework Command Line Console Tool v1.11.0dev Usage:

   zf [--global-opts] action-name [--action-opts] provider-name [--provider-opts] [provider parameters ...]
   Note: You may use "?" in any place of the above usage string to ask for more specific help information.
   Example: "zf ? version" will list all available actions for the version provider.

Providers and their actions:

 Version
   zf show version mode[=mini] name-included[=1]
   Note: There are specialties, use zf show version.? to get specific help on them.
 Config
   zf create config
   zf show config
   zf enable config
   Note: There are specialties, use zf enable config.? to get specific help on them.
   zf disable config
   Note: There are specialties, use zf disable config.? to get specific help on them.
 Phpinfo
   zf show phpinfo
 Manifest
   zf show manifest
 Profile
   zf show profile
 Project
   zf create project path name-of-profile file-of-profile
   zf show project
   Note: There are specialties, use zf show project.? to get specific help on them.
 Application
   zf change application.class-name-prefix class-name-prefix
 Model
   zf create model name module
 View
   zf create view controller-name action-name-or-simple-name
 Controller
   zf create controller name index-action-included[=1] module
 Action
   zf create action name controller-name[=Index] view-included[=1] module
 Module
   zf create module name
 Form
   zf create form name module
 Layout
   zf enable layout
   zf disable layout
 DbAdapter
   zf configure db-adapter dsn section-name[=production]
 DbTable
   zf create db-table name actual-table-name module force-overwrite
   Note: There are specialties, use zf create db-table.? to get specific help on them.
 ProjectProvider
   zf create project-provider name actions

</source>

Eclipse / Zend Studio

Eclipse suggestion de code

Il faut avoir au préalable téléchargé la version de ZF dans un coin :

cd ~/libs/
svn checkout http://framework.zend.com/svn/framework/standard/trunk zend

Bouton droit sur le projet puis Properties :

PHP Include Path > Add Library > Config > New > User Library Name : ZF ...

Ensuite indiquez le chemin vers ... ~/libs/zend/ ou ton chemin banane !

Bon fais comme dans l'infanterie : tu te casses ailleurs !

ZendX_Jquery

Installation

Installer la bibliothèque ZendX (pas livrée avec le Zend Framework mais maintenue au même endroit)

$ pwd
/home/gbp4dt5/libs/zend/library
$ ls
Zend

Récuperer ZendX

svn co http://framework.zend.com/svn/framework/extras/trunk/library/ZendX/

$ tree -d -L 2 .

.
|-- Zend
|   |-- Acl
...
|   `-- XmlRpc
`-- ZendX
    |-- Application
    |-- Console
    |-- Db
    `-- JQuery

C'est installé au même niveau et non dans Zend/. Pour votre information la librairie Dojo est dedans car officiellement supportée.

Code d'exemple

Dans le bootstrap (application/Bootstrap.php) : <source lang="php"> protected function _initViewHelpers() { $this->bootstrap ( 'view' ); $view = $this->getResource ( 'view' ); $view->addHelperPath ( "ZendX/JQuery/View/Helper", "ZendX_JQuery_View_Helper" ); $view->jQuery()->addStylesheet ( '/js/jquery/css/ui-lightness/jquery-ui-1.7.2.custom.css' ) ->setLocalPath ( '/js/jquery/js/jquery-1.3.2.min.js' ) ->setUiLocalPath ( '/js/jquery/js/jquery-ui-1.7.2.custom.min.js' );

$view->headLink()->appendStylesheet( '/css/bricosoft.css' ); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer ( ); $viewRenderer->setView ( $view ); Zend_Controller_Action_HelperBroker::addHelper ( $viewRenderer ); } </source>

Dans le layout (application/layouts/scripts/layout.phtml) : <source lang="html4strict"> <?= $this->doctype ()?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>www.bricosoft.com</title> <link rel="stylesheet" type="text/css" href="css/grids-min.css"> <?= $this->jQuery()->enable();?> <?= $this->headLink();?> </head> </source> enable() est ici explicite dans le cas où l'on n'utilisera pas d'objets ZendX_JQuery. On peut tout aussi bien mettre $this->jQuery() si l'on est sûr d'instancier un objet ZendX_JQuery.

<google uid="C08" position="left"></google>

Premier choix dans le contrôleur en appelant directement l'objet ZendX_JQuery_Form : <source lang="php">

   public function indexAction()
   {

$form = new ZendX_JQuery_Form(); $date = new ZendX_JQuery_Form_Element_DatePicker( 'date',

                       array('label' => 'La date :')
       		);

$form->addElement($date); $this->view->form = $form;

   }

</source> Soit en créant votre objet (c'est plus élégant) à placer dans library/My/Forms/Totoche.php

Remplacez alors dans le contrôleur :

$form = new ZendX_JQuery_Form();

par :

$form = new My_Forms_Totoche();

Votre objet : <source lang="php"> class My_Forms_Totoche extends ZendX_JQuery_Form { public function init() { $this->setName('Totoche'); $date = new ZendX_JQuery_Form_Element_DatePicker( 'date'); $this->addElement($date); ... </source>

Après ce choix cornélien, il reste la Vue : <source lang="php"> <?php echo $this->form; ?> </source> Et voilà, un clic sur l'élement affiche un calendrier sexy.