Zend Framework

Introduction au Framework Zend – Partie 2

Aujourd’hui j’ai décidé de tout remanier mon introduction à Zend. Au lieu d’expliquer pas à pas le fonctionnement, je préfère vous faire réaliser de a à z un site simple ayant 2 modules, un module de blog et un module de commentaires. Nous verrons ensuite pour la création d’un flux RSS et pourquoi pas, le partage de vos articles sur twitter.

Tout d’abord, le programme d’aujourd’hui sera la mise en place de notre projet.

Nous allons donc prendre la structure modulaire expliquée dans l’introduction partie 1. Sachez que je fournis ce tutoriel pour une utilisation en local via WAMP, Zend Server, LAMP ou autres alternatives. Nous utiliserons la version 1.10.2 du framework.

Le site sera créé via un alias et le framework Zend sera présent dans le dossier library de notre site. Après, à vous de transformer selon vos préférences mais sachez qu’il n’y a pas trop de modifications à apporter.

Chez moi, le site aura pour allias « tutosite.com » qui pointe directement vers le dossier public, donc faites bien attention à comment c’est déclaré dans le .htaccess et dans votre config apache. Ensuite, pour les fichiers, je donne leur chemin à partir de la racine du projet donc faites attention.

L’introduction étant terminée, nous allons donc nous attarder sur les différents fichiers de config.

Tout d’abord, votre fichier /public/.htaccess :
php_value include_path "./../library/"

php_flag zlib.output_compression On

SetEnv APPLICATION_ENV development
# The rules below basically say that if the file exists in the tree, just
# serve it; otherwise, go to index.php. This is more future-proof for your
# site, because if you start adding more and more content types, you don't
# need to alter the .htaccess to accomodate them.
# This is an important concept for the Front Controller Pattern which the
# ZF MVC makes use of.
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /tutosite.com/index.php [NC,L]

Ensuite, voici le fichier /public/index.php :
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH',
realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV',
(getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
: 'production'));

// Typically, you will also want to add your library/ directory
// to the include_path, particularly if it contains your ZF install
set_include_path(implode(PATH_SEPARATOR, array(
dirname(dirname(__FILE__)) . '/library',
get_include_path(),
)));

require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setDefaultAutoloader(create_function('$class',
"include str_replace('_', '/', \$class) . '.php';"
));

/** Zend_Application */
//require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configurations/app.ini'
);
$application->bootstrap()
->run();

Nous allons faire le fichier /application/bootstrap.php avec les configurations de bases pour une application modulaire :
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public static function autoload($class)
{
include str_replace('_', '/', $class) . '.php';
return $class;
}

/**
* Fonction de chargement
*/
protected function _initAutoload()
{
//on configure le module par défaut avec son namespace, son chemin et les ressources associées
$moduleLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Default_',
'basePath' => APPLICATION_PATH . '/modules/default'));
$moduleLoader->addResourceType('Models', 'models', 'Models');
$moduleLoader->addResourceType('Forms', 'forms', 'Forms');
Zend_Session::start();
return $moduleLoader;
}

/**
* Fonction servant à initialiser la vue
*/
protected function _initView()
{
// Initialize view
$view = new Zend_View();
$view->doctype('XHTML1_STRICT');
$view->headMeta()->appendHttpEquiv('Content-Type',
'text/html; charset=utf-8');
$view->addHelperPath('App/View/Helper/', 'App_View_Helper');
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');
// Add it to the ViewRenderer
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$viewRenderer->setView($view);
//ZendX_JQuery_View_Helper_JQuery::enableNoConflictMode();
// Return it, so that it can be stored by the bootstrap
return $view;
}

protected function _initModifiedFrontController()
{
$this->bootstrap('FrontController');
$front = $this->getResource('FrontController');
$response = new Zend_Controller_Response_Http;
$response->setHeader('Content-Type','text/html; charset=UTF-8', true);
$front->setResponse($response);
}
}

Pareil pour le fichier /application/configurations/app.ini :
[production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"

; Configuration de la gestion des modules
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = ""

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Maintenant nous pouvons nous attaquer au dossier des modules. Nous allons créer notre module default qui lui nous servira à créer notre page d’accueil en fonction des différents autres modules.

La structure des modules est toujours comme sur l’image. Nous allons donc créer notre /application/modules/default/IndexController :

 

 

class IndexController extends Zend_Controller_Action {

public function indexAction() {

}

}
Et la vue associée /application/modules/default/views/scripts/index/index.ptml :

Normalement, à partir d’ici, nous devrions avoir notre projet d’opérationnel. Tapez-y l’adresse de notre projet qui doit être http://localhost/tutosite.com et nous devrions voir s’afficher un magnifique « hello world ».

La prochaine fois nous allons voir la création d’un Layout pour notre site.