As a PHP developer, I love using RedBean as an ORM and Silex as a micro-framework. But I have to admit the fact the former comes as a static class isn't quite handy sometimes.
I was looking for a solution to make the two of these communicate with each other in a better way. Some effort has already been put into it, but the linked package doesn't help with the main issue I described above, so I decided to roll out my own.
Here comes a RedBean service provider for Silex, available through Composer and following the PSR-2 and PSR-4 standards. It's dead simple, and mainly serves one purpose : make RedBean available as an instance through Silex's service containing capabilities (which should help with mocking while writing unit tests). Using it thus allows you to write code like the following :
$book = $app['redbean']->dispense('book');
$book->title = 'PHP for dummies';
$app['redbean']->store($book);
As usual, I strongly encourage interested people to contribute to the project via GitHub !
Just a quick note to underline the fact this website has been translated to English, in order to be understandable by a broader audience. Besides being the world's most widespread language, it is also a growing standard in web development in every country, including France, hence the need I have felt to do it.
Old articles in French will be kept that way as there is no point in translating them, and will remain for historical purposes.
Enjoy, and see you soon (I hope) for new articles !
Et voici venir ShareExtension, une extension Twig destinée à faciliter l'utilisation de liens de partage vers les réseaux sociaux. Sont actuellement supportés Twitter, Facebook, Pinterest, Tumblr et Google+ (si, si).
Voici un rapide aperçu de son utilisation :
<a href="{{ twitter(my_url, 'Tweet this text') }}">Share on Twitter</a>
<a href="{{ facebook(my_url) }}">Share on Facebook</a>
Le projet suit la norme PSR-2, est installable via Composer et peut être forké à l'envi sur GitHub !
Cet article a pour objet dbot, un bot IRC tournant sur Node.js. La particularité de ce bot est qu'il permet l'inclusion de plug-ins proposant - pour l'heure - des fonctionnalités utiles aux développeurs web, faisant appel à différents services web et permettant d'interagir directement avec eux via des messages privés.
Le bot lui-même et ses plugins sont disponibles sur NPM et installables de la façon suivante :
L'authentification des utilisateurs est un point plutôt bien traité par Laravel, à tel point que celui-ci est livré avec un modèle User basique, ainsi que tout ce qu'il faut pour mettre rapidement en place un process d'authentification basé sur les utilisateurs enregistrés par son biais.
Mais qu'en est-il si vous devez gérer vos utilisateurs d'une part, et avez simplement besoin de protéger d'autre part une page d'administration, à laquelle vous serez seul(e) à avoir accès, derrière un couple d'identifiants prédéfinis ? On pourrait bien sûr envisager d'ajouter une notion de rôle à la base d'utilisateurs existants, de façon à tout articuler autour du même système, mais je ne suis personnellement pas très à l'aise avec cette idée : bien qu'il s'agisse d'authentification dans les deux cas, celle-ci n'a pas du tout le même sens vis-à-vis de votre application.
Heureusement, nous allons tout de même pouvoir nous appuyer en partie sur ce que propose Laravel en termes d'authentification basique HTTP. La meilleure manière de procéder sera, sans aucun doute, de définir un filtre dans le fichier app/filters.php :
if (($user != Config::get('auth.admin.user')) || ($password != Config::get('auth.admin.password'))) {
// La méthode qui nous intéresse n'est pas publique, on va tricher
// Une manière plus propre de procéder serait d'étendre la classe concernée
$method = new ReflectionMethod('Illuminate\Auth\Guard', 'getBasicResponse');
$method->setAccessible(true);
Vous remarquerez que j'ai choisi de stocker les identifiants attendus dans la configuration de l'application offerte par le framework. Pour ce faire, il suffit d'éditer le fichier app/config/auth.php comme suit (en bonus, vous pourrez facilement faire varier ces identifiants selon l'environnement d'exécution) :