foREST – Framework léger d’API RESTful écrit en PHP 5.3
by Vincent on octobre 22, 2011
Je vous présente aujourd’hui foREST, un petit framework d’API RESTful développé par mes soins durant quelques moments d’ennuis.
Ce framework utilise les composants YAML et Console du framework Symfony2.
Le projet est disponible sur Github, donc n’hésitez pas à participer.
Il vous permettra de réaliser des requêtes de type REST (GET, POST, PUT, DELETE), de gérer des utilisateurs et des droits d’accès à certaines ressources ainsi que de gérer des paramètres de différents types (string, integer, …) fournis dans vos requêtes.
Fichiers de configuration
Les fichiers de configuration utilisent le format YAML et j’ai utilisé le composant Symfony2 afin de parser le YAML dans ce projet.
Vous pouvez définir des connections à plusieurs bases de données nommées dans le fichier config/databases.yml comme suit pour la base de données nommée « main » :
main: dsn: mysql:host=localhost;dbname=forest username: root password: root
Les utilisateurs et roles d’accès à votre API peuvent être gérés simplement grâce à l’implémentation du composant Console de Symfony2 :
Pour ajouter un utilisateur, utilisez la commande :
php console user:add username password role
Pour supprimer un utilisateur :
php console user:del username
Enfin, il ne faut pas oublier de rafraîchir le fichier .htpasswd avec les nouvelles informations en tapant :
php console user:refresh
Créer une nouvelle ressource
Créer une ressource consiste à créer un répertoire du nom de votre ressource dans le répertoire « resources ». Par exemple : « resources/Books » et de créer à l’intérieur les 3 fichiers suivants :
routing.yml : contient les routes d’accès à vos API pour cette ressource. Elles sont définies sous la forme suivante :
"get:/books": description: "List all books by specified filters" resource: \Forest\Resources\Books action: getBooks role: user
queries.yml : contient les requêtes en bases de données, identifiées par une clé comme suit dans cet exemple :
"my.book.query":
database: main
query: >
SELECT * FROM books
Vous pouvez ensuite appeller cette requête dans vos différentes ressources avec :
return $this->query('my.book.query');
Enfin, il ne vous reste plus qu’à créer la classe PHP de la ressource, qui doit comporter le même nom que le répertoire de la ressource, à savoir « Books.php » dans notre exemple. Ce fichier doit prendre la forme suivante :
/**
* foREST - a simple RESTful PHP API
*
* @version 1.0
* @author Vincent Composieux - vincent.composieux@gmail.com
*/
namespace Forest\Resources;
use Forest\Core\Request,
Forest\Core\Resource;
/**
* Books
*/
class Books extends Resource {
/**
* List all books
*
* @param Request $request
*
* @return array
*/
public function getBooks(Request $request) {
return $this->query('my.book.query');
}
Vous êtes maintenant prêt à utiliser l’API ! Je vous invite à me contacter si vous souhaitez plus de détails sur l’utilisation de l’API, des remarques ou encore participer sur Github.
Compiler PHP 5.4 sous Linux (Debian / Ubuntu)
by Vincent on juillet 9, 2011
Interessons-nous un peu à la toute dernière release alpha de PHP et testons-la sur nos serveurs, quelle bonne idée ?
Voici pour vous la procédure de compilation :
Préparation de l’installation / compilation
wget http://snaps.php.net/php5.4-latest.tar.gz tar xzvf php5.4-latest.tar.gz cd php5.4-XXXXXXXXX/
Ensuite, pour le bon déroulement de la compilation, et parce-que j’ai eu quelques surprises, assurez-vous de bien disposer des paquets « apache2-threaded-dev » et « libxml2″ d’installés. Sinon :
apt-get install apache2-threaded-dev libxml2
C’est installé ? Ok, on y est, passons à la compilation !
Compilation !
Exécutez désormais les 3 méthodes « classiques » de compilation via ./configure, make et make install :
./configure --with-mysql=/usr/share/mysql --with-pdo-mysql --with-apxs2=/usr/bin/apxs2 --enable-xml --with-zlib make make install
Vous pouvez également effectuer un « make test » si vous souhaitez exécuter les quelques 8000+ tests unitaires contenus dans PHP.
Installation du module Apache
À ce niveau là, un « php -v » doit vous donner le résultat suivant :
composieux:~# php -v PHP 5.4.0alpha2-dev (cli) (built: Jul 8 2011 13:10:31) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2011 Zend Technologies
Oui ? Parfait, copions donc notre extension PHP pour Apache afin de remplacer l’existante (en supposant que vous êtes toujours dans le répertoire) puis redémarrons Apache :
cp libs/libphp5.so /usr/lib/apache2/modules/ /etc/init.d/apache2 restart
Une petite page phpinfo(); sur votre serveur web afin de vérifier la version actuellement installée de PHP et celle-ci devrait être en 5.4.
Symfony 1.3/1.4 : Exécuter une tâche dans un controller
by Vincent on avril 6, 2011
Si vous souhaitez exécuter une tâche créée par vos soins sous Symfony 1.3 et 1.4 dans un controller, rien de plus simple !
Commencez par dire à PHP que vous vous situez dans le répertoire « root » de votre application Symfony :
chdir(sfConfig::get('sf_root_dir'));
puis exécutez votre tâche en l’instanciant puis en appellant la méthode run() de la méthode parente sfTask :
$task = new sfMyTaskName($this->dispatcher, new sfFormatter()); $task->run();
Hello 2011, petit review de mon année 2010
by Vincent on janvier 9, 2011
Alors que nous sommes déjà en 2011 depuis quelques jours, il est temps de faire un petit bilan de cette année 2010 qui a été pour moi assez riche en événements.
Après 1 an à l’ECTEI en option développement avancé, en alternance chez Epixelic, me voila dans la vie active.
Je suis en effet depuis fin Septembre employé en tant qu’Ingénieur d’études et développement chez Degetel, et actuellement en mission dans la société Smartbox, leader en matière de coffrets cadeaux.
L’ECTEI, la formation de Bachelor en alternance
Malgré un mode d’alternance assez spécial (matin école, après-midi en entreprise), cette formation est tout de même très certifiante de par la quantité d’informations que nous apprenons au cours de l’année. En effet, cette formation vous propose de passer un diplôme universitaire de Java (en partenariat avec l’université Paris-Descartes), deux certifications sur le framework Microsoft .Net ainsi qu’une formation en Angleterre d’un mois avec des cours en université.
À la fin de cette année, une soutenance orale a lieue et vous permet de valider ou non votre année. Pour ma part, avec 18/20 à la soutenance, c’est dans la poche.
Epixelic, une bonne expérience
![]()
Ma soutenance orale pouvait contenir le sujet souhaité. J’ai choisi d’y traiter le sujet qui m’intéressait et qui était en rapport avec ce que je faisais dans l’entreprise qui m’accueillait en alternance : Zend Framework vs Symfony. Ayant déjà une première expérience sous le framework Symfony durant mes deux précédents stages de BTS (chez Anakrys, excellente agence web ou j’y ai rencontré des personnes passionnées), et quelques projets web personnels, Epixelic était pour moi l’occasion de me confronter au plus célèbre framework PHP : Zend Framework.
J’ai ainsi pu comparer assez efficacement les deux frameworks et me faire une idée des différents types d’usage.
Degetel, premier emploi
Avant la fin de mon alternance, j’ai été contacté par la société Degetel qui m’a proposé une mission de deux ans pour une grande chaine de télévision française. Malheureusement, la date de début de mission ne pouvait pas correspondre avec ma fin d’alternance, cette mission n’a donc pas pu se faire. C’est alors qu’une autre mission m’a été proposée : chez Smartbox, afin de migrer tous les sites internationaux vers la plateforme e-Commerce Magento, plateforme sous laquelle je n’avais aucune expérience, mais ce framework étant basé sous Zend Framework, j’ai pu m’adapter assez facilement.
J’ai commencer par faire beaucoup de TMA (Tierce Maintenance Applicative) sous les plateformes internationales et finalement, étant donner que la plateforme Magento rencontrait quelques soucis de stabilité, il n’a pas encore été décidé de migrer les sites sous Magento. J’ai donc également effectué des corrections et évolutions sur la plateforme Magento et autres applications internes.
Aujourd’hui, avec le nouveau projet de migration d’ERP chez Smartbox, je travaille également au développement d’une API RESTful (respectant les standards du protocole HTTP) qui devrait voir le jour fin Mars. Ce projet est très intéressant car il me permet de travailler sur un projet vraiment très bien structuré, documenté, et surtout, from scratch.
L’avenir ?
Doctrine : Comment effectuer un truncate table ?
by Vincent on octobre 9, 2010
Apparement, il n’existe à priori pas de fonction sous Doctrine permettant de faire un truncate sur une table. La solution d’effectuer des delete(); sur chaque élément de la table serait bien trop longue en terme de temps d’exécution je pense, tandis qu’un truncate effectue une destruction/recréation de la table, ce qui est beaucoup plus rapide et qui réinitialise également les auto increment au passage.
Je vous partage donc quelques lignes permettant d’effectuer un truncate sur votre ou vos tables via Doctrine :
$doctrineManager = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();
$doctrineManager->query('TRUNCATE TABLE matable');
Symfony : Rsync sous Windows
by Vincent on août 18, 2010
Ce soir, je cherchais à faire fonctionner le Rsync sous Windows, et particulièrement sous Symfony.
En effet, un outil existant permet de faire fonctionner du Rsync sous Windows vers un serveur unix via le protocole SSH. Il est trouvable à l’adresse suivante : http://trac.symfony-project.org/wiki/SymfonySyncOnWindows
Comment ça marche ?
Téléchargez l’archive fournie sur le lien ci-dessus puis décompressez-la dans un répertoire. Nous prendrons comme exemple C:\rsync.
Il vous faut ensuite aller éditer les variables d’environnement de Windows et particulièrement la variable PATH à laquelle vous devez rajouter votre répertoire C:\rsync.
Vous pouvez désormais utiliser la commande via une invite de commande (console) (Démarrer > Exécuter > cmd).
Modifier la librairie Symfony
Oui mais voilà, la commande ne va pas fonctionner pour autant lorsque vous lancerez votre ‘symfony project:deploy <environment> –go‘.
Pour celà, il vous faut aller modifier la ligne 164 du fichier lib/vendor/symfony/lib/task/project/sfProjectDeployTask.class.php.
Modifiez la ligne :
$this->getFilesystem()->execute($command, $options['trace'] ? array($this, 'logOutput') : null, array($this, 'logErrors'));
en :
$this->getFilesystem()->execute('start cmd /k ' . $command, $options['trace'] ? array($this, 'logOutput') : null, array($this, 'logErrors'));
La commande start cmd /k va nous permettre d’ouvrir une invite de commande qui se chargera d’exécuter le rsync.
Ainsi, si vous synchronisez comme moi via SSH, vous n’aurez plus qu’à taper votre mot de passe qui ne peut pas être inscrit dans le fichier de configuration, par raisons de sécurité.
En espérant que cette petite astuce puisse avoir aider certains d’entre vous
HTML5 – Mediaelement.js : Balises video et audio sur tous les navigateurs
by Vincent on août 1, 2010
Vous souhaitez utiliser les balises <video> et <audio> apportées par HTML5 sur tous les navigateurs (oui oui, y compris les anciens) ?
La solution
Une solution vient d’être apportée en Javascript pour adapter tout ça sur les différents supports à l’adresse suivante : http://mediaelementjs.com/.
Ainsi, vous pourrez utiliser ces nouvelles balises HTML5 sans soucis de compatibilité sur les différents navigateurs.
Solutions de compatibilité utilisées pour les différents navigateurs
- Safari : HTML5 natif
- Chrome : HTML5 natif
- Internet Explorer 9 : HTML5 natif
- Internet Explorer 6,7,8 : Silverlight/Flash
- Firefox : Silverlight/Flash
- Opera : Silverlight/Flash
- iPhone, iPad : HTML5 natif
- Android : HTML5 natif
De plus, plus besoin de vous soucier du format de vidéo, le H.264 qui ne fonctionne pas sous Opéra et Firefox pourra désormais fonctionner car MediaElements.js s’occupe de modifier la source pour l’adapter en fonction des navigateurs.
À noter que la balise <video> peut contenir plusieurs éléments <source> qui ont comme source une vidéo de format différente afin que le navigateur puisse utiliser le format approprié.
Exemple d’utilisation
video src="fichier.mp4" type="video/mp4" width="640" height="360">
video width="640" height="360"
source src="fichier.mp4" type="video/mp4"
source src="fichier.ogg" type="video/ogg"
source src="fichier.webm" type="video/webm"
/video
script
jQuery(document).ready(function($) {
$('video').mediaelementplayer();
});
/script
Devao : la preview est ouverte
by Vincent on juillet 5, 2010
Et voila, en ce 5 Juillet, je viens d’ouvrir la preview de mon projet de fin d’année. Pas des masses de fonctionnalités pour le moment, mais elles vont rapidement arriver par la suite !

Devao, qu’est-ce ?
C’est tout simplement un site agrégateur d’actualités en temps réel. Pour le moment, seulement certains blogs sont indexés mais par la suite, les utilisateurs auront la possibilité d’ajouter leurs propres blogs, des comptes Twitter et pleins d’autres petites choses en préparations
Ce projet a été développé sous Symfony 1.4 (http://www.symfony-project.org), le meilleur framework PHP selon moi et utilise l’ORM Doctrine (http://www.doctrine-project.org).
Rendez-vous sur http://www.devao.fr pour la suite et à très bientôt pour le debriefing de la preview et le détail des nouvelles fonctionnalités !
jQnotice : mon petit plug-in de notifications jQuery
by Vincent on juin 20, 2010
En ce Dimanche matin, j’avais besoin de faire quelquechose pour avoir des notifications / alertes sur un projet web dont je vous reparlerais très prochainement.
Je n’avais jamais créé de plug-in jQuery, c’est maintenant chose faite, même s’il n’est vraiment pas extraordinaire, il vous permettra de créer des petites notifications sympas en haut de votre site web ! Biensûr, il reste personnalisé pour mon projet mais est très facilement adaptable à votre sauce.
Commençons par le code JavaScript (après avoir inclus la librairie jQuery) :
(function($) {
$.notice = {
show: function(message) {
/** Configuration */
var top = 5;
var left = 15;
var fadeoutDuration = 1000;
/** Launch the notification */
$('html, body').animate({scrollTop:0});
$('
').attr('id', 'notice').css('left', (50-left)+'%').css('top', (0+top)+'px').appendTo('body').text(message);
/** Switch off the notification */
setTimeout(function() {$('#notice').animate({ opacity: 0, top: '-20px' }, fadeoutDuration);}, 2000);
setTimeout(function() {$('#notice').remove();}, 3000);
}
}
jQnotice = function(message) { $.notice.show(message); };
})(jQuery);
Ajoutez à celà un petit bloc de CSS :
#notice {
position:absolute;
background-image:url('/images/notice.png');
width:250px;
height:35px;
text-align:center;
padding:15px 0 0 0;
font-size:11px;
color:#467618;
}
Vous aurez également besoin de cette image :

Enfin, terminons par l’appel de la méthode pour lancer une notification :
jQnotice('Votre message de notification');
- Adresse du plug-in : http://plugins.jquery.com/project/jQnotice
- Adresse de démonstration : http://composieux.fr/jqnotice
Sencha : premier framework HTML5 pour mobiles
by Vincent on juin 20, 2010

Depuis le 14 Juin est rendu disponible Sencha, premier framework HTML5 pour mobiles. Autrement dit, le premier outil qui vous permet de créer des applications web pour mobiles (aussi bien Android qu’iPhone ou même iPad !).
La deuxième surprise est le fait que Sencha soit en fait un regroupement de trois frameworks Javascript assez énormes qui ont bien fait parler d’eux. Il s’agit en effet d’ExtJS (qui est maintenant devenu Sencha), Raphaël et jQtouch (un plug-in jQuery permettant de construire des applications iPhone).

Ce qui est intéressant, c’est la multitude de possibilités qu’offre le framework ainsi que les nombreuses démonstrations misent à disposition dans le package.
Je vous laisse donc vous amuser avec et personnellement, je l’utiliserais très certainement si j’en ai le temps lorsque j’aurais fini de développer Devao !














