Débuter avec le framework PHP Fuel

Ce didacticiel en deux parties vous permettra de démarrer avec le framework Fuel PHP. Commençons par les bases, puis passons à des sujets plus avancés dans la deuxième partie! Commençons.


introduction

Fuel est un nouveau framework PHP spécialement conçu pour PHP 5.3, qui utilise l’architecture éprouvée de MVC pour séparer les codes logiques et combine les meilleures idées de certains frameworks existants avec des améliorations et idées propres. Une version 1.0 finale n’a été publiée que récemment, mais le cadre a déjà beaucoup de succès après neuf mois de développement intensif. Cet article vous expliquera comment créer des sites avec Fuel - mais parlons d'abord de l'architecture..

Comprendre le MVC

L'architecture MVC (Model-View-Controller) est utilisée par de nombreux frameworks existants tels que CodeIgniter, Zend Framework, Symphony et Ruby on Rails. Si vous connaissez l'un de ces frameworks, vous avez une longueur d'avance!

Pour ceux qui découvrent cette architecture, MVC est une approche permettant de séparer votre code en fonction du rôle qu’il joue dans votre application. Dans le flux d'applications, il commence par un contrôleur chargé par Fuel. Une méthode est ensuite exécutée pour déterminer quelles données extraire à l'aide d'un modèle. Une fois que cela est fait, le contrôleur peut décider quelle vue (s) charger (le cas échéant). Les vues contiennent la sortie que vos visiteurs peuvent voir, les réponses AJAX ou les messages d'erreur.

Vous trouverez une explication plus détaillée de MVC du point de vue de carburant dans la documentation de Fuel MVC; donc nous allons passer aux bonnes choses.

Nous allons commencer par quelques-unes des bases pour attirer de nouveaux utilisateurs. Si cela vous semble évident, passez un peu de temps pour découvrir certaines des fonctionnalités les plus intéressantes..


Étape 1: Installation

L'installation est aussi simple que de récupérer une copie de GitHub ou de télécharger un ZIP à partir du site. Vous pouvez également utiliser une installation one-liner si vous utilisez un système * nix, tel que Linux, Mac OS X, etc. qui nécessite l'exécution de Git. L'installation de Git est assez simple et simplifie grandement les choses lorsque vous développez vos applications:

$ curl get.fuelphp.com/oil | sh

Cela installera une version très limitée de "oil", qui est le nom de l'utilitaire de ligne de commande que vous pouvez utiliser lorsque vous travaillez avec des applications Fuel. Cette version simplifiée peut être utilisée pour créer des applications:

$ oil créer un blog

Cela créera un dossier de blog dans votre répertoire actuel qui contiendra le framework de base. Si vous rencontrez des problèmes, consultez les instructions d'installation plus détaillées..

En supposant que vous exécutiez cette commande dans la racine Web de vos serveurs locaux, nous devrions pouvoir accéder à http: // localhost / test / public et voir la page d'accueil.

Structure de fichier

La racine de votre application doit contenir trois éléments principaux:

  • carburant/ - Où tout votre code PHP va vivre.
  • Publique/ - Tout ce que vous voulez être directement accessible dans le navigateur, donc JS, CSS, images, etc..
  • pétrole - Un exécutable, qui est une version plus complète de l'huile installée précédemment, capable d'exécuter des tâches de ligne de commande, telles que la génération de code ou le débogage interactif au sein de votre application. C'est facultatif, vous pouvez donc le supprimer si vous n'aimez pas la ligne de commande.

Dans fuel / nous avons quelques dossiers importants:

  • app / - Tout le code PHP spécifique à l'application va ici, y compris vos modèles, vues et contrôleurs.
  • coeur/ - C'est là que le carburant lui-même vit. Si vous utilisez Git, ce sera un sous-module qui peut être mis à jour facilement.
  • paquets/ - Le carburant sépare certaines logiques en paquets pour éviter de gonfler le noyau. Par défaut, Fuel contient trois packages: oil, auth et orm. Ces paquets ne seront pas chargés à moins que vous n'en ayez besoin, nous les filtrerons plus tard.

La partie importante ici est l'application / dossier:

  • config / - Les fichiers de configuration pour différentes classes et le fichier général "config.php" résident ici.
  • Des classes/ - C'est là que tous les contrôleurs, modèles, classes d'assistance, bibliothèques de logique métier, etc. iront. Si vous avez besoin d'écrire une classe à utiliser dans votre code, elle ira probablement ici. Les noms sont tous en minuscules.
  • classes / contrôleur / - C'est ici que les contrôleurs sont placés.
  • classes / modèle / - Emplacement pour vos modèles, bien qu'ils ne soient vraiment qu'une classe.
  • vues / - Placez vos fichiers de vue ici dans des dossiers ou tout simplement à la racine. Il n'y a pas de conventions de nommage spécifiques pour les vues.

Avant de passer à la théorie, écrivons du code.


Étape 2: Bonjour tout le monde

Supprimons le fuel / app / classes / controller / welcome.php contrôleur et faire notre propre, appelé bonjour.php.

Dans ce fichier, ajoutez le code suivant:

la classe Controller_Hello étend le contrôleur fonction publique action_index () echo "Hello World!"; 

Maintenant, si nous naviguons vers http: //localhost/test/public/index.php/hello, vous devriez voir "Hello World!" sortie vers le navigateur. le action_ préfixe nous dit qu'il s'agit d'une méthode routable, et non d'un callback ou d'une autre méthode partagée, et signifie que vous pouvez utiliser des noms de méthodes, tels que "list", sans que PHP ne soit confondu.

Si nous voulons que ce contrôleur hello soit notre contrôleur "racine" au lieu du maintenant disparu bienvenue.php, il suffit d'ouvrir fuel / app / config / routes.php et changer le _route_ route ainsi:

return array ('_root_' => 'bonjour', // la route par défaut);

Votre première vue

Faire un fichier fuel / app / views / hello.php et ajouter:

 

Bonjour!

Hey , comment ça va?

Ensuite, modifiez un peu votre contrôleur:

la classe Controller_Hello étend le contrôleur fonction publique action_index () echo "Hello World!";  fonction publique action_buddy ($ name = 'buddy') $ this-> response-> body = View :: factory ('hello', array ('name' => $ name,);

Maintenant, si vous chargez http: //localhost/test/public/index.php/hello/buddy ou http: //localhost/test/public/index.php/hello/buddy/John , vous verrez le $ name variable passant de la méthode à la vue. Essentiellement extrait() est exécuté sur la vue.


Étape 3: Configuration de base

Comme vous pouvez le constater, Fuel peut effectuer des opérations de base sur les contrôleurs / vues, mais si nous souhaitons en faire beaucoup plus, nous devrons apporter quelques modifications de base à la configuration. Commençons par ouvrir fuel / app / config / config.php et mettre en place quelques choses:

/ ** * index_file - Nom du fichier d'amorçage principal. * * Définissez-le sur false ou supprimez-le si vous utilisez mod_rewrite. * / 'index_file' => 'index.php',

Si tu as mod_rewrite installé, nous pouvons changer cette valeur pour qu’elle soit une chaîne vide, ce qui nous permettra de supprimer index.php de notre URL. Il y a un fichier .htaccess en public / qui supportera cette.

Ensuite, nous devons configurer la configuration de la base de données, qui, dans l’intérêt de ce tutoriel, est supposé être MySQL. Créez votre base de données avec votre interface graphique de bureau, votre phpMyAdmin ou votre ligne de commande, etc.:

 mysql> create database blog_example;

S'ouvrir fuel / app / config / db.php et mettre le Fuel :: DÉVELOPPEMENT tableau, comme si:

Fuel :: DEVELOPMENT => array ('type' => 'mysql', 'connection' => array ('hostname' => 'localhost', 'database' => 'blog_example', 'username' => 'votremoteur' , 'password' => 'yourmysqlpassword', 'persistent' => false,), 'table_prefix' => ", 'charset' => 'utf8', 'caching' => false, 'profiling' => false,),

Ensuite, permet d’activer le orm et auth package en supprimant les commentaires sur les lignes suivantes:

/ ** * Ces packages sont chargés au démarrage de Fuel. Vous pouvez les spécifier de la manière suivante: * * array ('auth'); // Cela supposera que les paquets sont en PKGPATH * * // Utilisez ce format pour spécifier explicitement le chemin du package * array (* array ('auth' => PKGPATH.'auth / ') *); * / 'packages' => array ('orm', 'auth',),

Cette étape n’est nécessaire que si vous souhaitez les utiliser - ce qui, dans ce tutoriel, sera.

Facultatif: Utilisation d'un hôte virtuel

La dernière étape de la configuration consiste à créer un hôte virtuel. Vous n'avez pas avoir besoin faire cela, mais cela signifie que vous pouvez utiliser une vraie URL et supprimer /Publique/ à partir de votre URL. Si vous utilisez Apache, un morceau simple comme celui-ci devrait faire l'affaire:

 DocumentRoot / home / phil / Sites / blog / public ServerName local.blog  Options Tout AllowOverride All  

S'il s'agissait d'un site actif, nous ajouterions le nom de serveur sous "myawesomeblog.com" au lieu de "local.blog", mais cela fonctionne pour notre démo. Une fois que vous avez ajouté "127.0.0.1 local.blog" à votre / etc / hosts déposer, vous devriez être prêt à partir. Si vous souhaitez ignorer cette étape, ajustez les URL dans cet article..


Étape 4: Débuter le développement

Avec cette compréhension de base du fonctionnement des contrôleurs, des vues et de la configuration, vous pouvez probablement consulter la documentation et commencer rapidement, mais pour vraiment y aller, le meilleur moyen doit être Échafaudage.

L'échafaudage n'est pas un nouveau concept et est surtout connu pour sa place dans le cadre de Ruby on Rails. C'est essentiellement un moyen très simple de créer du code basé sur quelques hypothèses via la ligne de commande. Vous souhaitez ajouter, modifier et supprimer une entité pour laquelle vous nommez et fournissez des champs. C'est fait par le pétrole et le sous-commandement "huile générer un échafaud"

Donc, si nous voulons construire un blog de base, il suffit d'écrire "$ oil g échafaudage post title: string summary: varchar [250] corps: text". Oil sera très commentée sur ce qu’elle fait et vous expliquera tous les fichiers créés:

 Création du modèle: /home/phil/Sites/blog/fuel/app/classes/model/post.php Création de la migration: /home/phil/Sites/blog/fuel/app/migrations/001_create_posts.php Création du contrôleur: / home / phil / Sites / blog / fuel / app / classes / controller / posts.php Création de la vue: /home/phil/Sites/blogfuel/app/views/posts/index.php Création de la vue: / home / phil / Sites / blog / fuel / app / views / posts / view.php Création d’une vue: /home/phil/Sites/blog/fuel/app/views/posts/create.php Création d’une vue: / home / phil / Sites / blog / fuel / app / views / posts / edit.php Création de la vue: /home/phil/Sites/blog/fuel/fuel/app/views/posts/_form.php Création de la vue: / home / phil / Sites / blog / fuel / app / views / template. php

Remarque: les modèles générés par un échafaudage utilisent le package ORM. Assurez-vous qu'il est activé comme décrit ci-dessus..

Vous verrez ici un modèle nommé "poster", une migration (plus sur ceux plus tard) un contrôleur"des postes"et un tas de vues. Les champs sont tous générés en fonction des arguments fournis, qui sont nom de champ: type de champ [longueur optionnelle]. Pour Titre, nous avons utilisé ": string" qui, tant que vous utilisez MySQL, alias : varchar [255], mais tout type de base de données est supporté.

Avec cette commande, nous devons exécuter nos migrations. Une migration est une série de modifications qui doivent être apportées à une base de données. Cela devient utile lorsque plusieurs développeurs travaillent sur un projet, car chaque développeur peut ajouter une migration et vous pouvez exécuter une seule commande pour vous assurer que votre copie locale est à jour. Plus d'erreurs "champ manquant" ou "table n'existe pas" après l'extraction de la dernière copie de développement!

Pour exécuter cette migration, tapez simplement:

$ oil raffine migrate Migrated to last version: 1.

Maintenant, vous pouvez voir ce que le pétrole a fait pour vous en allant à http://local.blog/posts

Si vous voulez créer des contrôleurs, des modèles et des migrations séparément et pas tous ensemble, vous pouvez le faire facilement avec huile g contrôleur, huile g migrer, huile g modèle, etc.

Templating

Vous avez peut-être remarqué, à l'étape ci-dessus, que Oil a créé un fichier:

 Création de la vue: /home/phil/Sites/blog/fuel/app/views/template.php

Cela sera créé lorsque vous exécuterez une commande d'échafaudage pour la première fois, toutes les vues étant entourées d'un "modèle" ou d'une "présentation" - qui est un en-tête et un pied de page enveloppant votre contenu. Pour modifier le modèle par défaut, il vous suffit de modifier ce modèle, d'inclure votre propre code CSS, d'ajouter un logo et de saisir les métadonnées de votre choix..

Lorsque vous créez manuellement de nouveaux contrôleurs, vous pouvez étendreController_Template'au lieu de l'habituel'Manette'avoir ce modèle enroulé autour des vues chargées dans le contrôleur.

Si vous souhaitez utiliser un autre modèle pour un contrôleur, il vous suffit de changer le $ template propriété à quelque chose de différent.

La classe Utilisateurs étend Controller_Template public $ template = 'alternative'; 

Cela utilisera le fuel / app / views / alternative.php voir le fichier au lieu de l'habituel fuel / app / views / template.php.

Travailler avec des formulaires

L'un des aspects les plus importants de toute candidature est la soumission du formulaire. Voici comment les données sont capturées par un utilisateur. il peut s'agir d'un identifiant, d'un commentaire, d'une commande de panier, etc. Tout se fait normalement en HTML, mais Fuel vous propose des méthodes utiles pour rendre ce processus beaucoup plus facile. Ils sont optionnels, donc si vous êtes un fanatique du HTML, continuez, mais pour accélérer les choses, lisez la suite:

 

titre: "));?>

résumé: "));?>

body: "), array ('cols' => 60, 'rows' => 8));?>

Ceci est un formulaire très simple qui fonctionnera à la fois créer et modifier. Pour chaque entrée, si elle peut trouver une correspondance dans POSTER il l'utilisera; sinon, il cherchera le $ post variable et entrez la valeur (bon pour l'édition).

L'avantage réel de ces aides ne provient pas d'une syntaxe plus claire, comme vous pouvez le penser, mais en ce sens qu'elle permet au cadre d'envelopper votre formulaire par programme. Cela signifie que Fuel peut incorporer automatiquement des attributs à tous les formulaires pour s'assurer que les données sont envoyées dans le bon jeu de caractères et être activées. CRSF (Falsification de requête intersite) automatiquement.

Valider vos formulaires

La validation est un moyen simple de s'assurer que certaines informations ont été fournies correctement dans un formulaire de soumission. Il peut correspondre à certains modèles, types de données ou conditions et aidera à améliorer l’intégrité ou les données..

Par défaut, la validation n'est pas utilisée par Scaffolding, car il est compliqué de supposer ce que le développeur s'attend à voir dans les données. Pour cette raison, la validation est facultative mais est assez facile à ajouter dans vos contrôleurs générés ou à utiliser à partir de zéro.

Jetons un coup d'oeil à la façon dont une méthode "Créer un message" pourrait ressembler à notre blog:

 fonction publique action_create ($ id = null) if (Input :: method () == 'POST') $ val = Validation :: factory (); // Ajoutez un champ pour le titre, attribuez-lui l'étiquette "Titre" et rendez-le obligatoire $ val-> add ('title', 'Title') -> add_rule ('required'); // Maintenant, ajoutez un autre champ pour résumé, et demandez-lui de contenir au moins 10 et au plus 250 caractères $ val-> add ('summary', 'Summary') -> add_rule ('required') -> add_rule ('min_length ', 10) -> add_rule (' max_length ', 250); $ val-> add ('body', 'Article body') -> add_rule ('required'); if ($ val-> run ()) // Publie une publication en fonction de l'entrée (tableau) $ post = Model_Post :: factory ($ val-> validated ()); // Essayez de l'enregistrer si ($ post-> save ()) Session :: set_flash ('notice', 'Added post #'. $ Post-> id. ');  else Session :: set_flash ('notice', 'Impossible de sauvegarder la publication.');  Response :: redirect ('posts');  else $ this-> template-> set ('error', $ val-> errors ());  $ this-> template-> title = "Posts"; $ this-> template-> content = View :: factory ('posts / create'); 

Nous pouvons voir ici que nous indiquons à la classe Validation - qui est chargée automatiquement, comme toutes les classes], les champs qui nous intéressent. Nous leur attribuons ensuite des règles et leur attribuons des étiquettes à lire. Si $ val-> run () est vrai, nous faisons un nouveau Model_Post exemple en utilisant l'usine, et envoyer $ val-> validé () qui contient un tableau de toutes les données soumises. Avec cela, nous pouvons simplement sauvegarder l'instance, qui utilise ORM pour tout faire pour vous.

Si l'une des règles de validation retourne faux, puis $ val-> run () va échouer et on nous donne un tableau d'erreurs dans $ val-> erreurs () que nous pouvons renvoyer à l'utilisateur. Le défaut template.php recherche un élément "notice" de flashdata (faisant partie de la classe de session) ou simplement des données de vue normales et peut générer une chaîne ou un tableau, ce qui fonctionne parfaitement.

En utilisant votre connaissance de la validation et de la création de formulaires, vous pouvez commencer à créer toutes les applications basées sur le contrôleur que vous aimez..

Travailler avec des tâches

Les tâches sont similaires aux contrôleurs, mais ne peuvent pas être accédées via une URL ni être acheminées de quelque manière que ce soit. Au lieu de cela, ils sont exécutés via le "raffinage de l'huile"sous-commande dans le terminal. Idéal pour la création de scripts de shell interactifs qui ont accès à votre base de code et facilite la création de tâches cron sécurisées..

Certains cadres suggèrent d’utiliser wget, boucle ou quelque chose de similaire à exécuter un contrôleur pour créer un travail cron, mais cela peut entraîner des problèmes de sécurité ou de cohérence lorsque les travaux cron sont exécutés trop rapidement et que des résultats malveillants ou inattendus apparaissent. De cette façon, il est complètement protégé du monde extérieur.

Pour un exemple de tâche, jetez un oeil à la "fournie"des robots"tâche dans fuel / app / tasks / robots.php:

class Robots fonction statique publique exécutée ($ speech = null) if (! isset ($ speech)) $ speech = 'TUER TOUS LES HUMAINS!';  $ eye = \ Cli :: color ("*", 'rouge'); return \ Cli :: color ("\" $ speech \ "_____ / / _____ \\", 'blue'). "\ n". \ Cli :: color ("____ [\\", 'blue' ). $ eye. \ Cli :: color ('---', 'blue'). $ eye. \ Cli :: color ('/] ____', 'blue'). "\ n". \ Cli: : color ("/ \\ # \\ \\ _____ / # # / \\ / \\ # \\ _. --- ._ / # / \\ / / | \\ | | / | \\ \\ / ___ / | | | | | | \\ ___ \\ | | | | | | | | | | | | | | | | | | \ <\\ _//^\\\\_ /> // \\\\ \\ || / | \\ //// \\\\\\\\ / | \\ || / | | | | | --- | | --- | | --- | | --- | | | | | | ___ | | ___ | / \\ / \\ | _____ | | _____ | | HHHHH | | HHHHH | ", 'blue');

Pour exécuter cette plaisant tâche suffit de taper "robots pétroliers" ou "oil r robots 'Tuez toutes les souris' "faire dire au robot autre chose.


Résumé

Si vous avez suivi chaque étape, vous aurez installé Fuel, appris où se trouvent les fichiers importants, configuré une installation de base pour s'exécuter sur Apache avec mod_rewrite (D'autres serveurs fonctionnent également) et ont créé des contrôleurs simples et des vues à l'aide de formulaires et de validation. Avec un échafaudage disponible pour générer du code à séparer, il devrait y avoir beaucoup de code pour apprendre!

À ce stade, vous devez disposer de suffisamment de connaissances pour jouer et créer des applications très simples, c'est-à-dire jusqu'à la deuxième partie de cette série, où nous allons suivre le processus de création et d'extension des contrôleurs de base afin de créer votre séparation front / backend. Nous passerons également en revue les ORM avancés, les pilotes d’authentification et les téléchargements de fichiers. Restez à l'écoute!