Pourquoi Laravel prend la communauté PHP par la tempête

Je dois admettre que, à un moment donné, je me sentais un peu mal par rapport au langage PHP. Un certain nombre d'articles poignants sur la haine de PHP entouraient le Web comme un virus, et certains de ses frameworks phares, tels que CodeIgniter, devenaient rapidement obsolètes. Pendant tout ce temps, Ruby on Rails semblait être en tête du peloton en termes d’innovation et de facilité de développement. Au fil du temps, je me suis retrouvé de plus en plus à chercher ma ceinture à outils Ruby..

Mais un jour, j’ai découvert un nouveau cadre élégant, appelé Laravel. Au début, je l'ai écarté comme étant un autre clone de Sinatra qui diminuerait rapidement en néant, car le développeur principal l'a abandonné. Néanmoins, semaine après semaine, mes flux sur les réseaux sociaux étaient très chargés, louant la lisibilité de Laravel. "Se pourrait-il, pensais-je, que PHP dispose enfin d'un framework vraiment moderne?"

En savoir plus sur Laravel à http://laravel.com

Je n'étais plus disposé à rester à l'écart; il était temps de creuser. Un an plus tard, je suis l'un de ses plus grands évangélistes. Laravel rend PHP amusant à nouveau! Mieux encore, je ne crois plus que PHP soit à jamais voué à la plupart des sites personnels et des blogs WordPress laids. Nan; En fait, cet auteur est convaincu que, grâce à Laravel, Composer et PHP 5.5, nous sommes sur le point de vivre la prochaine renaissance du langage le plus populaire côté serveur sur le Web..

Pour installer la dernière version de développement de Laravel (v4), vous devez d'abord installer Composer. Ensuite, il suffit de cloner le référentiel et d'installer les dépendances. git clone git: //github.com/illuminate/app.git myApp et compositeur installer. Vous êtes prêt à partir!


Éloquent

La plupart des développeurs PHP commencent leur voyage en imbriquant d'innombrables lignes de SQL directement dans leur PHP glacé et illisible. Inutile de dire que l’exclusion des sites les plus élémentaires conduit rapidement à un gâchis intenable..

Vous vous souvenez de la première fois que vous avez entendu parler d'ActiveRecord de Ruby on Rails? Eh bien, dans le monde PHP, Eloquent est sa première implémentation.

Besoin d'exemples?

// Récupère toutes les tâches $ tasks = Task :: all (); // Récupère la tâche avec un identifiant de 1 $ task = Task :: find (1); // Mettre à jour une tâche $ task = Task :: find (1); $ task-> title = 'Installez ce cookie!'; $ task-> save (); // Créer une nouvelle tâche Task :: create (['title' => 'Ecrire un article']); // Supprimer une tâche Task :: find (1) -> delete ();

Les gens, il n'est pas possible d'écrire plus de code lisible en PHP! Ce serait une chose si Eloquent ne vous permettait d'effectuer que des opérations CRUD de base sur une table, mais ce n'est certainement pas le cas..

Examinez les relations entre les tables, telles qu'un utilisateur et ses tâches respectives. Dans Laravel, après avoir défini une méthode de recherche rapide pour chaque modèle, nous pouvons facilement gérer une relation un à un ou toute association de ce type. Voici quelques exemples pour vous mettre en appétit.

// Obtient toutes les tâches de l'auteur avec un identifiant de 1 $ tasks = User :: find (1) -> tasks; // Récupère l'auteur d'une tâche $ author = Task :: find (5) -> user () -> nom d'utilisateur; // Insérer une nouvelle tâche par l'auteur $ task = new Task ([title: 'Go to store.']); Utilisateur :: find (1) -> tasks () -> insert ($ task);

Il n'est pas exagéré de considérer Eloquent comme la meilleure implémentation d'ActiveRecord en langage PHP.


Forfait Compositeur

Installer le compositeur.

À partir de Laravel 4 (actuellement en Alpha), l’ensemble de la structure sera modulaire et disponible sous forme de packages Composer individuels..

Composer est un système de packaging pour PHP similaire à PEAR, mais meilleur. Cela simplifie au maximum le processus de gestion des dépendances.

Pensez à l'écosystème du cadre existant. Pour le moment, vous êtes obligé de vivre avec le jeu de fonctionnalités de base de chaque framework. Vous ne pouvez pas choisir, par exemple, d’utiliser Eloquent dans une application CakePHP. Comme vous pouvez l’imaginer, cette vérité a conduit à un processus insensé de réinventer la roue encore et encore… et plus encore..

Mesdames et Messieurs, l'avenir de PHP est modulaire. Pourquoi installer un framework massif et gonflé, alors que vous n’avez besoin que de quelques-unes de ses offres? Eh bien, bientôt, vous n'aurez plus à le faire. Vous n'avez besoin que d'Eloquent dans un projet simple? Bien - pas un problème du tout! Installez-le simplement via Composer et passez à autre chose.!

Donc, si nous passons à un monde PHP modulaire davantage basé sur des paquets, comment Laravel s’intègre-t-il? Eh bien, pensez-y comme une collection prédéterminée de paquets, enveloppés dans un arc! Mieux encore, si vous devez mettre à jour la dernière version du framework, c'est aussi simple que d'exécuter mise à jour du compositeur.

A titre d'exemple de la flexibilité que cela procure, ajoutons la bibliothèque de tests Mockery, très répandue, à une application Laravel. Commencez avec un nouveau projet Laravel 4 et éditez-le. composer.json fichier à requérir Mockery.

"require": "illuminate / foundation": "> = 1.0.0", "mockery / mockery": "dev-master", "autoload": "classmap": ["app / controllers", " app / models "," app / database / migrations "," app / tests / TestCase.php "]

Reportez-vous à Packagist.org pour obtenir la liste des packages Composer disponibles, ainsi que les instructions d’installation..

Maintenant que nous avons informé Composer que notre application nécessite Mockery, nous pouvons installer les dépendances applicables..

mise à jour du compositeur

Et c'est tout! Nous pouvons maintenant utiliser Mockery dans nos tests. C'est le pouvoir de Composer et Laravel 4 au travail! Nous avons des roues; arrêtons d'en créer de nouveaux! Des centaines de paquets sont disponibles via Packagist.org.

   

Des centaines de paquets sont disponibles via Packagist.org.


Itinéraires

La plupart des développeurs PHP débutants ne connaissent rien d'autre que le plus naturel des systèmes de routage. Créez une arborescence de répertoires correspondant à l'URI de votre choix, puis poursuivez. Par exemple, ajoutez un index.php fichier dans le répertoire suivant: blog / admin /, et, maintenant, vous pouvez y accéder en naviguant sur: localhost: 8888 / blog / admin / index.php. Facile! Eh bien, peut-être au début; mais vous constaterez probablement que vous avez besoin de plus de flexibilité et de contrôle sur la route déclenchée dans votre application..

Laravel adopte une approche de routage incroyablement simple et facile à utiliser. À titre d'exemple, écrivons l'itinéraire nécessaire pour afficher une vue du profil d'un utilisateur..

Route :: get ('utilisateurs / id', function ($ id) // recherche l'utilisateur $ utilisateur = utilisateur :: find ($ id); // affichage, et passe le retour d'objet utilisateur View :: make ('users.profile') -> avec ('utilisateur', $ utilisateur););

Maintenant, quand un utilisateur demande example.com/users/1, la utilisateurs / profile.php la vue sera rendue.

Alternativement, nous pouvons utiliser des contrôleurs traditionnels pour gérer la logique.

Route :: get ('utilisateurs / id', 'Utilisateurs @ show');

À présent, Contrôleurs / Utilisateurs.php sera responsable de rendre la vue - en particulier la spectacle méthode.

avec ('utilisateur', $ utilisateur); 

Authentification Facile

Presque toute application Web de substance nécessitera une forme d'authentification. Laravel fournit une interface simple mais facile à utiliser pour l'authentification des utilisateurs.

Commencez par créer un utilisateurs table avec les champs nécessaires pour la Nom d'utilisateur et mot de passe. Rappelez-vous: il s'agit d'un cas d'utilisation idéal pour une migration!

Laravel peut alors tentative pour connecter un utilisateur - probablement basé sur les valeurs fournies par l'utilisateur à partir d'un formulaire.

Voici un exemple de base, sans l'aspect validation.

Route :: post ('login', function () $ credentials = array ('nomutilisateur' => Input :: get ('nomutilisateur'), ​​'password' => Input :: get ('mot_passe')); / / effectue la validation si (Auth :: tentative ($ informations d'identification)) // Les informations d'identification correspondent. Connecté! return Redirect :: to ('admin / profile'););

Notez que, dans les coulisses, Laravel hachera automatiquement le mot de passe fourni et le comparera à ce qui est stocké dans le utilisateurs table.

En supposant que les informations d'identification de l'utilisateur correspondent, l'ID utilisateur sera stocké dans la session et l'utilisateur sera connecté. Lors des demandes suivantes, vous pouvez récupérer le nom d'utilisateur de l'utilisateur actuellement connecté avec:

$ user = Auth :: user () -> nom d'utilisateur;

Envoi Email

Admettez-le: l'envoi d'e-mails via votre application est toujours plus compliqué qu'il ne devrait l'être. Plus maintenant à Laravel 4!

Construit sur le paquet SwiftMailer, vous trouverez maintenant un nouveau config / mail.php déposer dans votre application. C'est ici que vous pouvez spécifier les informations d'identification nécessaires à votre fournisseur de messagerie. Voici une version simplifiée de ce que vous trouverez:

 'smtp.example.com', 'port' => 2525, 'from' => array ('address' => null, 'name' => null), 'encryption' => 'tls', 'username' = > null, 'password' => null,);

Il suffit de remplacer les valeurs par celles de votre serveur de messagerie en conséquence.

Ensuite, nous avons besoin d’une vue pour le courrier électronique. Créons-en un, appelé bienvenue.blade.php, qui sera utilisé lorsqu’un nouveau membre s’inscrira sur le site de nos fans Justin Bieber.

  Bonjour, $ user-> name. Merci encore pour votre inscription aux dernières nouvelles de Justin Bieber! Nous attendons avec impatience de vous voir. Merci, gestion  

Une fois que tout est en place, établissons l'exemple de route nécessaire et envoyons le courrier électronique..

Route :: get ('/', function () $ user = Utilisateur :: find (1); $ data = ['utilisateur' => $ utilisateur]; // vue de courrier électronique, données à afficher, fermeture pour l'envoi de courrier électronique Mail :: send ('emails / bienvenue', $ data, fonction ($ message) utilise ($ utilisateur) $ message -> à ($ utilisateur-> email) -> sujet ('Welcome Bieber Fan!') -> joindre ('images / bieberPhoto.jpg');); renvoyer 'Email de bienvenue envoyé!';);

Assez simple, hein? Nous saisissons le nouvel utilisateur de la table et envoyons un courrier électronique à l'adresse électronique associée à cet utilisateur. Grâce à la fonctionnalité SwiftMailer, effectuer des actions apparemment complexes, telles que joindre des fichiers, est un jeu d'enfant! Désormais, chaque nouveau membre reçoit une photo de Justin Bieber lors de son inscription. Parfait!


BFFs avec colonne vertébrale

"Backbone fournit une structure à votre code de spaghetti en désordre!"

Laravel 4 simplifie au maximum le processus de création d'API RESTful. La clé est dans la façon dont, par défaut, JSON sera renvoyé d'une route.

Imaginons que nous devions renvoyer une liste de tous les utilisateurs au format JSON. Eh bien, Chuck, nous pouvons accomplir cela en une seule ligne.

Route :: get ('utilisateurs', function () return User :: all (););

Si vous exécutez cette route, un peu de JSON sera affiché, tel que:

["id": 1, "nom d'utilisateur": "[email protected]", "id": 2, "nom d'utilisateur": "[email protected]"]

Vous vous demandez où le mot de passe le champ est? Dans Laravel, dans le modèle associé à la table, nous pouvons spécifier, via un $ caché propriété, quels champs masquer de la sortie JSON.

Maintenant, avec une bibliothèque JavaScript, comme Backbone, nous pouvons récupérer ces données facilement.

var User = Backbone.Model.extend (); var UsersCollection = Backbone.Collection.extend (model: User, url: '/ users'); var users = new UsersCollection; utilisateurs.fetch (); utilisateurs.toJSON (); // [objet, objet, objet]

Qu'en est-il d'aller chercher un seul utilisateur à la place? Eh bien, nous devons d’abord configurer le bon itinéraire Laravel:

Route :: get ('utilisateurs / id', fonction ($ id) return User :: find ($ id););

Comme nous l’avons appris, cela renverra le code JSON de l’utilisateur demandé (moins le mot de passe). Ensuite, nous créons un modèle Backbone et récupérons les données..

var User = Backbone.Model.extend (urlRoot: '/ users'); var utilisateur = nouvel utilisateur (id: 1); user.fetch (); // id: 1, nom d'utilisateur: '[email protected]'

Remarquez comment l'essentiel du travail se situe du côté du client? Notre code Laravel est aussi simple que possible.


Migrations

Si vous êtes exclusivement un développeur PHP, il est probable que vous n'ayez pas encore expérimenté le plaisir des migrations, qui ont été popularisées par le framework Ruby on Rails..

Pensez aux migrations en tant que contrôle de version pour votre base de données. Que se passerait-il si, le lendemain de l'ajout de ce nouveau champ à votre les tâches table, vous avez réalisé que ce n'était pas nécessaire après tout. Eh bien, vous supprimeriez manuellement le champ, non? Mais qu'en est-il des autres développeurs de votre équipe? Leur code peut casser si vous ne leur dites pas!

Avec les migrations, cependant, nous ne faisons qu’annuler la migration précédente et nous continuons notre journée! Mieux encore, lorsque vous transmettez des modifications à votre serveur, un simple php artisan migrer Cette commande mettra automatiquement à jour votre base de données de production. Associé à Schema Builder de Laravel, le processus de gestion des bases de données est aussi simple que possible..

Créons une migration pour ajouter un nouveau utilisateurs table à notre base de données. A partir de la ligne de commande:

Migration artisanale php: make create_users_table --table = users --create

Dans l'extrait ci-dessus, nous spécifions le nom de la table, ainsi que le --créer drapeau, pour spécifier que nous créons une nouvelle table, plutôt que de modifier une table existante.

Cette commande créera un nouveau fichier de migration dans notre application. Nous pouvons ensuite utiliser la classe Schema de Laravel pour préparer le schéma de notre table.

incréments ('id'); $ table-> string ('title'); );  / ** * Inverser les migrations. * / public function down () Schema :: drop ('tâches'); 

Remarquez comment cette classe propose deux méthodes: en haut et vers le bas, qui spécifient l'action que Laravel doit entreprendre lors de l'exécution d'une migration, ainsi que sa restauration.

Dans ce cas, le up (), nous créons une nouvelle table, les tâches, et spécifiez deux champs pour le identifiant et Titre de la tâche, respectivement. Lors de la restauration de la migration, nous abandonnons simplement la table.

Exécutez la migration en revenant au terminal et en tapant:

php artisan migrer

C'est tout! Vous avez maintenant un tout nouveau les tâches table avec deux champs!… Euh oh, faut-il revenir en arrière? Simple:

php artisan migrate: rollback

Au revoir les tâches table.


Lame

Le moteur de templates Blade de Laravel fournit une syntaxe propre pour les vues. Par exemple, avec PHP classique, pour filtrer une liste de personnes et faire écho à leurs noms respectifs dans un élément de la liste, nous pourrions écrire:

Cette syntaxe peut être appliquée à la plupart des structures de contrôle de PHP..

Ce n'est pas si grave, mais nous pouvons faire mieux. Toute vue de Laravel contenant le .blade.php extension de fichier sera analysé, en conséquence. Par conséquent, l'extrait précédent peut être remplacé par:

    @foreach ($ people as $ p)
  • $ p
  • @endforeach

Remarquez comment les variables à répercuter sont encapsulées dans , semblable à ce que vous trouverez dans un moteur de modélisation JavaScript, comme des guidons.

La lame peut également être utilisée pour des mises en page élégantes et des pages maîtres. Créons une vue principale de base pour illustrer cette fonctionnalité.

// views / layout.blade.php       
@yield ('conteneur')

le @rendement la ligne est la clé. Ceci spécifie que toute vue enfant avec une section identifiant de récipient devrait y être niché.

Créons ensuite une nouvelle vue.

// views / home / hello.blade.php @layout ('layout') @section ('conteneur') 

Bonjour, $ user-> name!

@endsection

Terminé! Pages maîtres faciles en PHP!


Contrôleurs ingénieux

Sans un peu d'aide, la création d'un service RESTful en PHP peut s'avérer quelque peu difficile. Eh bien, dans Laravel 4, cela ne pourrait être plus simple. Le cadre offre ce que nous appelons des ressources reposantes. Testons-le.

Dans votre itinéraires fichier, spécifiez une nouvelle ressource.

Route :: resource ('tasks', 'TasksController');

Cette ligne de code indique que nous voulons créer une nouvelle ressource, les tâches, et placez le TasksController contrôleur en charge de la gestion de la logique pour chaque route.

En suivant les principes de REST, cette ressource enregistrera automatiquement les itinéraires pour:

  • GET tâches (Afficher toutes les tâches)
  • GET tasks / id (Afficher une seule tâche)
  • GET tâches / create (Afficher le formulaire pour créer une nouvelle tâche)
  • Tâches POST (Créer une nouvelle tâche)
  • GET task / id / edit (Éditer une seule tâche)
  • PUT tasks / id (tâche de mise à jour)
  • DELETE tasks / id (Supprimer la tâche)

Ensuite, créons cela TasksController, mais, plutôt que de le faire manuellement, nous laisserons Artisan gérer le passe-partout.

Contrôleur php artisan: make TasksController

Cela va créer un nouveau controllers / TasksController.php contrôleur, et le remplir avec un peu de passe-partout.

 

Chacune de ces méthodes sera déclenchée lorsque la route RESTful applicable est déclenchée. Donc, pour afficher un formulaire pour créer un nouveau tâche, nous chargerions la vue applicable dans le créer méthode, qui sera déclenchée lorsque example.com/tasks/create Est demandé. Ce formulaire devrait POST pour /les tâches, auquel cas le le magasin la méthode sera déclenchée.

Ça ne pouvait pas être plus propre!

Reportez-vous à la page Vimeo de UserScape pour les derniers screencasts officiels de Laravel.


Base de données

Combien de fois vous êtes-vous trouvé "en train de" ensemencer manuellement une table de base de données avec des enregistrements fictifs, à des fins de test? Pour moi, eh bien, c'est un grand nombre! Laravel 4 nous permet de spécifier un la graine fichier pour une table.

Pour l'essayer, créez un nouveau fichier portant le même nom que sa table respective dans la app / base de données / graines répertoire de votre application. Ce fichier doit stocker un tableau de tableaux, chacun contenant les paires clé-valeur nécessaires. Voici un exemple:

 'Go to the store'] ['title' => 'Finish article Laravel'] ['title' => 'Ramasser les œufs.' ]]);

Nous avons maintenant décrit trois nouvelles lignes pour le les tâches table dans notre base de données. Semons le.

php artisan db: graine

Terminé!


Model Setters et Getters

Il y a probablement diverses actions que vous déclenchez souvent lorsque vous définissez ou obtenez un champ à partir d'une table de base de données. Par exemple, lorsqu'un utilisateur s'inscrit pour suivre les meilleures pratiques de sécurité, nous devrions toujours hacher son mot de passe. Plutôt que de faire le travail manuellement, mettons à jour le Utilisateur modèle et spécifiez que, lors de la définition d'un mot de passe, il doit d'abord être haché.

mot de passe ); 

Facile! Désormais, nous ne devons jamais nous soucier de cette pièce du casse-tête lors de l'enregistrement d'un nouvel utilisateur. Naturellement, l'option inverse est également disponible, si vous devez traiter la valeur d'un champ avant de "l'obtenir".

Que se passe-t-il si nous devons embellir un horodatage ou un nom? Cela aussi peut être accompli à travers le modèle, si vous le souhaitez.

firstName. ". $ this-> lastName;

Cette nouvelle nom complet() la méthode sera maintenant disponible pour notre instance d'utilisateur.

echo User :: find (1) -> fullName (); // John Doe

Communauté (conférence)

Peut-être plus important que tout, Laravel a, dans un laps de temps relativement court, formé une communauté évangélique florissante, composée de certains des développeurs les plus influents de la communauté PHP..

Pourquoi est-ce important? Simple: avec l'évangélisation vient à la fois l'éducation et la contribution. Le plus gros obstacle à un nouveau cadre est de faire passer le mot et de montrer aux gens comment utiliser le truc! Heureusement, Laravel excelle dans la documentation et les tutoriels / screencasts sur le Web - y compris un cours complet dispensé par le vôtre.!

Découvrez les tenants et les aboutissants de Laravel ici chez Tuts + Premium!

La vérité est que nous avons à peine effleuré la surface de ce qui est possible à Laravel. Nous n'avons pas encore couvert la gestion des erreurs de Laravel, l'intégration PHPUnit, le chargement rapide (avant et après la récupération des collections) et bien plus encore. Assurez-vous de consulter la documentation fantastique pour aller plus loin dans le cadre, et gardez l'œil ouvert pour la version officielle de la version 4.!

La communauté populaire Nettuts + propose un certain nombre de tutoriels spécifiques à Laravel..

Si cet article a servi de moteur à votre nouvel amour pour PHP et Laravel, vous envisagerez peut-être d'assister à la première conférence annuelle Laracon (conférence), prévue pour la fin février 2013, à Washington, DC. Peut-être que je vous verrai bien!

La toute première conférence Laravel, Laracon, se tiendra à Washington DC les 22 et 23 février 2013. Pour en savoir plus, visitez le site http://conference.laravel.com.