- Compatibilité:
Utiliser Propel dans votre projet Zend.
Dans cette article, je vais vous montrer comment utiliser Propel comme ORM dans un projet Zend.
L'environnement que j'utilise est un serveur LAMP sous Ubuntu.
C'est quoi un ORM
Un ORM (Object-Relational Mapping) permet d'accéder à une base de donnée en utilisant des classes et objets et en fournissant un API simple qui permet de stocker et récupérer des données.
Installer Zend
Je pars du principe que vous avez un MySQL, un Apache et PHP 5.3 installés
Ouvrez un terminal linux et taper la commande suivante :
apt-get install zend-framework
Une fois la package installé, créer un projet Zend dans le répertoire de votre choix :
zf create project /mon/repertoire
Vérifier bien que vous avez un fichier .htaccess dans votre répertoire "public" dans votre projet Zend.
Son contenu est le suivant :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Il faudra mettre en place le module rewrite sur apache.
Enfin il ne reste plus qu'à configurer le virtualhost sous Apache et l'include_path de PHP.
Pour se faire, rendez vous sur le fichier "default" dans le répertoire "/etc/apache2/sites-available/"
via la commande suivante :
nano /etc/apache2/sites-available/default
Dans ce fichier, j'ai ajouté un virtualhost spécifique pour Zend dont voici le code :
...
NameVirtualHost localhost.zend:80
<VirtualHost localhost.zend:80>
DocumentRoot /var/www/zend/public/
ServerName localhost.zend
<Directory "/var/www/zend/public">
Options Indexes FollowSymLinks Multiviews
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>
...
Enregistrez votre fichier.
Une fois ceci fait, il faut configurer le fichier "php.ini" afin d'ajouter à l"include_path le
chemin vers le framework Zend.
Toujours dans un terminal, tapez la commande suivante :
nano /etc/php5/apache2/php.ini
Localisez la ligne où modifier l'include path et ajouter ceci :
...
; UNIX: "/path1:/path2"
include_path = ".:/usr/share/php:/usr/share/php/libzend-framework-php"
...
Enregistrez votre fichier.
Il ne vous reste plus qu'à relancer votre serveur apache via la commande suivante :
/etc/init.d/apache2 restart
Et voila votre projet devrait fonctionner. Pour le vérifier, ouvrez un navigateur et accéder à l'url suivante :
http://localhost.zend/
Si toutefois cela ne fonctionne pas, n'hésitez pas à vous rendre sur le site de Zend :
Zend Framework
vous pouvez également laisser un commentaire.
Installer Propel
Nous allons installer Propel via PEAR. Toujours dans un terminal linux, tapez les commandes suivantes :
pear channel-discover pear.propelorm.org
Vous devez au préalable installer phing :
pear channel-discover pear.phing.info
Il vous faudra également installer le package php5-xls via la commande :
pear install phing/phing
apt-get install php5-xsl
Ensuite il faut installer Propel via les commandes suivantes :
pear install -a propel/propel_generator
Et voila Propel est installé.
pear install -a propel/propel_runtime
Créer vos classes à partir d'une base de données existante avec Propel
Je vais vous montrer comment créer vos classes à partir d'une base de données existantes.
Tout d'abord, rendez vous dans le répertoire de votre projet zend (via le terminal).
Créez un repertoire "orm" (par exemple) et créez un fichier "build.properties".
Dans ce fichier, renseignez vos paramètres de connection à votre base de données :
propel.project = orm
# The Propel driver to use for generating SQL, etc.
propel.database = mysql
# This must be a PDO DSN
propel.database.url = mysql:dbname=orm
propel.database.user = orm
# propel.database.password = orm
Si vous voulez un exemple de base de donnée, allez à la page suivante :
Exemple de base de données MySQL.
Une fois votre fichier "build.properties" créé et renseigné, retournez sur le terminal afin de commencer à créer vos classes.
Entrez la commande suivante :
propel-gen reverse
Le fichier xml de la base de données est créé dans le répertoire "orm". Nous allons pouvoir donc créer les classes à partir de ce fichier.
Entrez la commande suivante :
propel-gen om
Il est à noter qu'il peut exister des problèmes avec les clés étrangères, il vous faudra mettre à jour manuellement le schéma XML généré.
Une fois la commande terminée, vous pourrez voir dans votre répertoire "orm" un répertoire "build" contenant toutes les classes.
Enfin pour terminer, il faut créer le fichier de runtime php pour pouvoir communiquer avec les classes précédemment créées.
Pour le faire, il faut créer un fichier "runtime-conf.xml" dans le répertoire "orm" dont voici le code :
<?xml version="1.0" encoding="UTF-8"?>
<config>
<propel>
<datasources default="orm">
<datasource id="orm">
<adapter>mysql</adapter> <!-- sqlite, mysql, myssql, oracle, or pgsql -->
<connection>
<dsn>mysql:host=localhost;dbname=orm</dsn>
<user>orm</user>
<password>orm</password>
</connection>
</datasource>
</datasources>
</propel>
</config>
Ensuite dans le terminal, entrez la commande suivante pour créer le fichier "orm-conf.php" et le fichier "classmap-orm-conf.php" :
propel-gen convert-conf
Les 2 fichiers sont créés dans le répertoire "build/conf".
Intégrer Propel dans votre projet Zend
Nous avons créer nos classes à partir de notre base de données, il faut maintenant l'utiliser avec Zend.
Tout d'abord, copiez les 2 fichiers de conf dans le répertoire "configs" du répertoire "application" de votre projet Zend.
Ensuite ouvrez le fichier de bootstrap.php du répertoire "application".
Ajouter une fonction d'initialisation de Propel :
protected function _initPropel()
{
require 'propel/Propel.php';
Propel::init(APPLICATION_PATH . '/configs/orm-conf.php');
}
Enfin copiez le contenu du répertoire "build/classes" dans le répertoire "library" de votre projet Zend.
Exemples d'utilisation de Propel dans votre projet Zend
Si tout c'est bien passé votre projet Zend peut utiliser Propel.
Nous allons voir comment l'utiliser via quelques exemples.
Nous allons partir du controller "indexController.php" :
Lire des données
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
$this->_helper->viewRenderer->setNoRender();
}
public function indexAction()
{
// action body
$actors = ActorQuery::create()->find();
foreach ($actors as $actor) {
$content .= $actor->getFirstname() . ' ' . $actor->getLastname() . '<br />';
}
$this->getResponse()
->appendBody($content);
}
}
Update de données
public function updateAction()
{
$actor = ActorPeer::retrieveByPK(1);
$actor->setFirstName('Autre Prénom');
$actor->save();
}
Insertion de données
public function insertAction()
{
$actor = new Actor();
$actor->setFirstName('Jerome');
$actor->setLastName('DEBRAY');
$actor->save();
}
Suppression de données
public function deleteAction()
{
$actor = ActorQuery::create()->findPk(2);
$actor->delete();
}
accueil