Migrer de version du ZF

Introduction

Cette page n'a pas pour objectif d'être exhaustive. Elle ne recense que les évolutions dont j'ai eu besoin lors de mes migrations.

N'hésitez pas à ajouter en commentaires les modifications dont vous avez eu besoin. 

Version 1.0.0-RC2 vers 1.0.0 Stable

La méthode d'instanciation du viewRenderer a changé. Si on veut récupérer le viewRenderer pour changer sa configuration dans le bootstrap (index.php), il faut remplacer :
<?php
// ancienne version
$viewRenderer = Zend_Controller_Action_HelperBroker::
    getExistingHelper('viewRenderer');
 
// à remplacer par :
$viewRenderer = Zend_Controller_Action_HelperBroker::
    getStaticHelper('viewRenderer');
?>

Version 1.0.0-RC1 vers 1.0.0-RC2

Pas remarqué d'évolution majeure

Version 0.9.3 vers 1.0.0-RC1

Attention, je vous donne ici un truc pour rendre vos anciens codes compatibles. Cela dit, l'esprit du MVC a changé entre la 0.9.3 et la 1.0.0-RC1. Pour voir ce qui a changé avec l'utilisation du ViewRenderer, je vous invite à aller voir le tutoriel d'initiation Kitpages : Initiation au Zend Framework

Pour rendre vos codes compatibles, il faut ajouter la ligne suivante dans index.php 

<?php
$controller->setParam('noViewRenderer', true);
?>

Version 0.9.2 vers 0.9.3

Pas vu de modif pour l'instant...

Version 0.9.1 vers 0.9.2

La différence principale est la réécriture complète du logger. Ci-dessous dans le code, je reporte un exemple d'utilisation en 0.9.1 et un exemple en 0.9.2.

<?php
// -------- 0.9.1 ---------
Zend_Log::registerLogger(new Zend_Log_Adapter_File(LOG_FILE));
Zend_Log::log("** URI=".$_SERVER["REQUEST_URI"]);
// -------- 0.9.2 ---------
$logger = new Zend_Log();
$logger->addWriter(new Zend_Log_Writer_Stream(LOG_FILE));
$logger->debug("** URI=".$_SERVER["REQUEST_URI"]);
?>

A signaler également un changement avec les attachements dans Zend_Mail :

  • addAttachement prend maintenant un Zend_Mime_Part en paramètre.
  • Pour envoyer un fichier attaché, le plus simple est d'utiliser la fonction createAttachement de Zend_Mail au lieu de l'ancien addAttachement... (voir dans le code du ZF les différences de paramètres... ça se passe dans Zend_Mail::createAttachement)

Version 0.9.0 vers 0.9.1

J'avais bon espoir d'avoir la migration la plus simple depuis la sortie du ZF, et ben non, c'est sans doute la plus longue !!!
  • Modification des majuscules et minuscules dans Zend_Db
    • quand on fait un fetchAll, les résultats du tableau associatif respectent maintenant la casse de mysql.
    • Warning, ça peut vous faire pas mal de modifs !!
    • A priori, ils ont du désactiver le paramètre PDO::CASE_LOWER dans PDO...

 

Version 0.8.0 vers 0.9.0-Beta

La migration vers la version 0.9 n'est pas évidente. Cependant la version 0.9 est une version béta. Normalement, l'API doit commencer à se stabiliser. C'est l'occasion de remercier toute l'équipe du Zend Framework pour le boulot accompli.

Les modifications à faire pour la migration :

  • Ne plus inclure Zend.php, mais Zend/Loader.php
  • Ajouter quelque part un Zend_Loader::loadClass("Zend_Registry");
  • Remplacer partout Zend::loadClass par Zend_Loader::loadClass
  • Remplacer partout Zend::register par Zend_Registry::set
  • Remplacer partout Zend::registry par Zend_Registry::get
  • les paramètres de formattages de Zend_Date on changé
    • par exemple : $date->get('d/m/Y') devient $date->get('dd/MM/yyyy)

Version 0.7.0 vers 0.8.0

Les modifications nécessaires sont :

  • le Zend_Controller_RewriteRouter n'est plus et s'appelle Zend_Controller_Router_Rewrite
  • Les noms de tables sont automatiquement entourés de du caractère ` (backquote), attention donc à ne pas échapper deux fois le nom des tables dans vos requêtes SQL.
  • Filtres et validation :
    • la classe Zend_Filter_Input semble sur le déclin
      • Pour filtrer les données, utiliser Zend_Filter et les classes spécifiques du genre Zend_Filter_StripTags
      • On parle de filtrage, pas de validation : ça renvoie une chaîne filtrée, ça ne dit pas si la chaîne initiale était valide ou non.
    • La classe Zend_Validate et les classes satellites du genre Zend_Validate_EmailAddress permettent de savoir si une chaîne est valide.
    • un exemple simple est fourni ci-dessous
  • $this->_forward($fcontroller, $faction, $fparams); est à changer en $this->_forward($faction, $fcontroller, null, $fparams); (note : le null c'est le nom du module si jamais on utilise des modules)
    • Note : j'en ai bavé pour comprendre ce qui se passait ici...
<?php
// validation de l'email
$email = $_POST["email"];
$validator = new Zend_Validate_EmailAddress();
if (!$validator->isValid($email)) {
    Zend_Log::log(print_r($validator->getMessages(),true));
    $this->_redirect("comment/edit?error=email+invalide");
}
// filtre du sujet et du contenu en n'autorisant que les
// balises <b> et <em>
$filter = new Zend_Filter_StripTags(array("b","em"));
$subject = $filter->filter($_POST["subject"]);
$content = $filter->filter($_POST["content"]);
?>

Version 0.6.0 vers 0.7.0

Pour que les erreurs continuent à remonter depuis le controller, il faut ajouter la ligne

$controller->throwExceptions(true); 

Version 0.2.0 vers 0.6.0

Voilà la liste des évolutions dont j'ai eu besoin :

  • disparition du Zend::loadInterface : à remplacer par require_once
  • remplacer
    • $router->setRewriteBase('/Tutoriaux/');
    • par
    • $controller->setBaseUrl('/Tutoriaux/');
  • modifier le code qui me permet de savoir quelle action/controller sont appelés avant d'arriver dans l'action concernée. cf code ci dessous
<?php
// routes must be defined before
Zend::loadClass("Zend_Controller_Request_Http");
$request = new Zend_Controller_Request_Http();
$request->setBaseUrl($baseUrl);
$request = $router->route($request);
// if routes define a param named language
// (you can do the same with action, controller,...)
$languageParam = $request->getParam("language",null);
?>

Version 0.1.5 vers 0.2.0

En gros il a fallu changer la façon d'appeler le rewriteRouter. Regardez en bas les modifications de code :

  • Invervention de la classe Zend_Controller_Router_Route
  • Ajout du setRewriteBase
<?php
$controller = Zend_Controller_Front::getInstance();
$router = new Zend_Controller_RewriteRouter();
 
$router->addRoute(
    "comment",
    "comment/:action/:comment",
    array(  "comment"=>null,
            "controller"=>"comment",
            "action"=>"display"
    )
); 
$controller->setRouter($router);
?>
<!-- à remplacer par -->
<?php
$controller = Zend_Controller_Front::getInstance();
$router = new Zend_Controller_RewriteRouter();
 
$cmtRoute = new Zend_Controller_Router_Route(
    "comment/:action/:comment",
    array(  "comment"=>null,
            "controller"=>"comment",
            "action"=>"display"
    )
);
$router->addRoute("comment",$cmtRoute);
$router->setRewriteBase('/Tutoriaux/');
 
$controller->setRouter($router);
?>


Ajoutez vos propres commentaires :

Nom: Email:
(optionnel)
Sujet:
Note: