Zend Framework

De Bricosoft.

Un développeur Zend typique
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+.

Il est livré chez toutes les bonnes distribs :

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

Sommaire

[modifier] 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 :

$ 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

[modifier] Eclipse / Zend Studio

[modifier] 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 !

[modifier] ZendX_Jquery

[modifier] 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.

[modifier] Code d'exemple

Dans le bootstrap (application/Bootstrap.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 );
	}

Dans le layout (application/layouts/scripts/layout.phtml) :

<?= $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>

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.

Premier choix dans le contrôleur en appelant directement l'objet ZendX_JQuery_Form :

    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;
    }

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 :

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);
...

Après ce choix cornélien, il reste la Vue :

<?php 
echo $this->form;
?>

Et voilà, un clic sur l'élement affiche un calendrier sexy.

Plus