Une API pour intéragir avec un dépôt Git en PHP

Git est tellement performant qu’il est de plus en plus intégré dans d’autres solutions pour gérer le versionnement de fichiers. C’est le cas de wikis tels que gollum en ruby.

En PHP, trois approches existent pour consulter et modifier le contenu d’un dépôt Git. Leur choix varie en fonction des possibilités de paramétrage du serveur et des fonctionnalités nécessaires.

En pure PHP avec Glip

Glip est une bibliothèque PHP permettant d’accéder avec n’import quel dépôt Git depuis vos scripts. Le code est écrit en pure PHP5 et reproduit partiellement les fonctionnalités de la commande git en modifiant le contenu du répertoire .git du dépôt. Cette solution a l’avantage de ne pas nécessiter l’installation de Git pour être utilisé.

Via l’extension PHP « php-git »

php-git est une extension native pour PHP 5.3 (développée en C). L’extension fourni un ensemble de classes faciles à utiliser pour lire et modifier un dépôt Git. Après quelques tests, il s’avère que cette solution est la plus performante.

Par abstraction de la commande système avec GitCore

GitCore est une autre bibliothèque PHP5.3 utilisant la commande système git pour interagir avec un dépôt. Cette solution a l’avantage d’offrir toutes les fonctionnalités de git dans vos scripts PHP.

Une API commune pour Git en PHP

Les trois solutions définissent des classes et méthodes PHP différentes. Pour permettre un basculement facile d’une solution à une autre il serait intéressant d’avoir une API commune. Celle de l’extension php-git est déjà très bien documentée et exhaustive. Il faudrait donc refactoriser les librairies Glip et GitCore pour reprendre l’API de php-git.

Related Posts:

Installation d’Apache+PHP 5.3 avec MacPorts pour Symfony2

Il existe de multiples solutions pour installer un environnement de développement PHP sur un Mac. Dans l’ordre de complexité, voici celles que j’ai retenu et expérimenté :

  1. Pour les plus pressés, Mac OS X Snow Leopard 10.6 fourni en standard Apache et PHP 5.3, pour l’utiliser il suffit d’activer le « Partage Web » dans les « Préférences Système ».
  2. Pour les moins aguerris, il y a des solutions packagées comme MAMP ou XAMPP pour Mac, mais ne comptez pas ajouter quel que module que ce soit. On croit gagner du temps avec des interfaces graphiques, mais à l’usage c’est l’enfer. (Edit: Il existe également Zend Server CE, solution packagée plus riche que Benjamin nous signale en commentaire)
  3. Il est possible d’obtenir une configuration PHP sur mesure sans trop de casser la tête en utilisant MacPorts, le gestionnaire de paquets pour mac inspiré de Linux.
  4. Les plus experts préfèrent compiler eux-mêmes leur version de PHP.

En m’inspirant d’un article de Ryan Parman, voici comment installer un environnement Apache+PHP avec MacPorts qui remplace la configuration Mac OS X par défaut.

Attention, MacPorts compile systématiquement les nouveaux modules,
cette opération peut prendre beaucoup de temps
suivant la puissance de votre machine.

Lire la suite »

Related Posts:

Apprendre les tests unitaires avec PHPUnit et Symfony2

On distingue deux catégories de développeurs :

  1. Ceux qui connaissent les tests unitaires, savent les écrire et les exécuter
  2. Ceux qui devraient les connaitre, savoir les écrire et les exécuter.

En effet, les développeurs bien informés savent à quel point les tests unitaires peuvent leur simplifier la vie dans le développement et la maintenance d’applications. Comme le dit Nick Belhomme :

Je suis convaincu que tout le monde devrait comprendre et utiliser PHPUnit pour ses projets.

Si vous faites partie des la seconde catégorie de développeurs, ceux qui devraient connaitre les tests unitaires, voici un excellent cours gratuit pour apprendre les fondamentaux et s’entraîner à PHPUnit.

Si vous souhaitez travailler avec Symfony2, la présentation de Fabien Potencier sur l’utilisation de PHPUnit dans le framework devrait vous convaincre de leur intérêt dans la validation du logiciel au travers des tests fonctionnels.

Pour vous perfectionner, il ne vous reste plus qu’à potasser le guide sur l’utilisation des tests unitaires dans Symfony2.

Related Posts:

Comment reconnaitre un bon programmeur

How to recognise a good programmer

How to recognise a good programmer sur Inter-Sections

« ..ce qui fut fatal pour une majorité de startups e-commerce dans les années 90, ce sont les mauvais programmeurs. Beaucoup de ces entreprises furent lancées par les entrepreneurs qui pensaient que pour qu’une startup fonctionne il suffisait d’avoir une idée claire et d’embaucher des programmeurs pour l’implémenter. C’est bien plus dur — voire même impossible en fait — parce que les entrepreneurs ne peuvent pas distinguer les bons programmeurs des moins bons… »

Savoir repérer les bons développeurs c’est aussi pour les développeurs une façon de savoir comment être bon. La moitié des critères avancés dans cet article donnent l’impression qu’il faut être né programmeur pour être bon (être passionné, curieux, autodidacte et intelligent), mais ce savoir-faire s’acquière aussi (par les projets personnels, la diversification des technologies maîtrisées et diplômes validés).

Lire l’article original

Related Posts:

  • No Related Posts

Vous avez aimé Chrome ? Vous préférerez Iron.

Chrome, le navigateur web acheté par Google à Chromium, est l’un des derniers acteurs dans la nouvelle compétition pour être la fenêtre par laquelle les internautes visualisent les pages web. Cette situation est très intéressante pour Google puisque s’il est impossible d’être sur toutes les pages web (même si avec Google Adsense et Google Analytics, il est déjà largement présent), il est par contre plus envisageable d’être présent sur tous les terminaux en offrant Chrome.

Iron, alternative à Chrome

Innovant par la simplicité de son interface, sa stabilité et ses performances, le navigateur made in Google est fortement critiqué pour son intrusion dans la vie privée. Mais Chromium étant un projet Open-Source, la société SRWare a pu créer Iron en retirant à Chrome tout ce qui peut porter atteinte à votre confidentialité et en y ajoutant de quoi maitriser d’avantage les informations que vous transmettez.

Lire la suite »

Related Posts:

  • No Related Posts

sfWidget rendu via un composant Symfony

Les formulaires créés en utilisant Symfony sont composés de widgets et de validators. Les widgets décrivent l’apparence des champs du formulaire alors que les validators décrivent leur contenu. Il est actuellement possible de choisir parmi plus de 80 types de widget différents (entre ceux de l’API et les plugins). Ils correspondent globalement à des éléments d’interface standardisés.

Si vous avez essayé de créer votre propre widget, vous avez du vous apercevoir que le rendu est fait a l’intérieur de la fonction sfWidget->render(). Ce qui suffit pour des rendus simples, mais s’avère inapproprié lorsque votre champ de formulaire se complexifie. La structure vue-contrôleur du framework n’est pas respectée.

Pour compenser ce manque, j’ai créé un widget dont le rendu se fait via un composant (component) ou une vue partielle (partial). Ce widget est destiné à faciliter la création de champ de formulaire spécifiques pouvant utiliser entre autre AJAX, le profil de l’utilisateur, l’objet sfContext et sfRequest…

Lire la suite »

Related Posts:

Configurer WAMP avec PHP 5.3.1 pour Symfony 2.0

Symfony 2 va révolutionner le développement web. Sa nouvelle architecture et sa flexibilité permettront une prise en main plus rapide, une réutilisation de code plus facile et des performances adaptées à la taille de chaque application.

Le nouveau framework est en développement, mais si comme moi vous voulez explorer les fonctionnalités de ce trésor, voici comment bien démarrer sous Windows.

Le pack d’installation fournit un fichier check.php permettant de vérifier la compatibilité de votre environnement PHP avec les pré-requis du nouveau framework.

La distribution WAMP correspond quasiment à la configuration suggérée pour Symfony 2.0 (dans la version dev du 10/03/2010 en tout cas).

Pré-requis Symfony 2.0

Symfony 2.0 requière PHP 5.3.1 alors que WAMP propose par défaut la 5.3.0

Contrairement à ce qui avait été annoncé, c’est PHP 5.3.1 qui est recommandé au lieu de la 5.3.0 (voir changelog).

Lire la suite »

Related Posts:

I18n du routing pour les modules d’admin Symfony

L’internationalisation d’une application (i18n) consiste à servir les pages dans la langue de l’utilisateur. Par défaut, les modules d’admin de Symfony gèrent l’i18n. Ainsi, il est simple de traduire ces modules. Dans cet article je vais vous expliquer :

  • comment gérer plusieurs langues pour l’interface de vos modules d’administration en indiquant la langue dans l’URL
  • et comment basculer en un clic d’une langue à une autre.
Drapeaux des langues

Basculer rapidement entre les langues.

Cet article est écrit pour Symfony 1.4 avec l’admin-generator Doctrine. Nous utiliseront également le plugin sfLanguageSwitchPlugin.

Lire la suite »

Related Posts:

Plugin sfDoctrineAdminGeneratorWithShowPlugin pour Symfony 1.4

Une question récurrente sur les forums traitant du framework Symfony :

A quoi sert le paramètre with_show dans le fichier generator.yml ?

Aussi surprenante soit-elle, la réponse usuelle à cette question est :

Par défaut, à rien…

Alors comment afficher les détails d’un objet dans une page d’administration sans que celles-ci soient modifiables ? il est bien nécessaire d’activer l’action show. Les plugins sfDoctrineAdminGeneratorWithShowPlugin et sfPropelAdminGeneratorWithShowPlugin ont été créés pour compenser ce manque. Malheureusement ils ne fonctionnent que pour Symfony 1.2 et 1.3.

Lire la suite »

Related Posts:

Détecter le contexte d’exécution sous Symfony

Lorsqu’on développe avec le framework Symfony, ou plus généralement en PHP, il est parfois nécessaire de connaitre le contexte dans lequel est exécuté le code pour adapter les actions effectuées. Ainsi, il est possible d’identifier au moins 4 contextes d’appel pour lesquels je vous propose une méthode de détection :

  1. Depuis la console (communément appelé CLI)
  2. Depuis une adresse locale (localhost)
  3. Depuis une requête AJAX (ou XMLHttpRequest JavaScript)
  4. En mode debug
  5. Contexte d’exécution

Lire la suite »

Related Posts: