Débuter avec Cake PHP Partie 2

Dans notre dernier tutoriel sur CakePHP, nous avons examiné la configuration du framework CakePHP et présenté quelques concepts de base et sa terminologie. Nous allons maintenant illustrer davantage les capacités de développement rapide de CakePHP en prenant pour exemple une application de blog personnel. Dans la prochaine série de didacticiels, nous construirons l'application de blog de manière incrémentielle afin que le processus de développement de base de CakePHP soit présenté clairement au lieu d'être brièvement mentionné comme dans d'autres didacticiels similaires. Dans ce didacticiel, nous commençons par un composant d’authentification de base pour l’application exemple de blog.

Étape 1: Définir un objectif

Notre objectif est de créer les composants d'une application de blog personnel. À la fin du projet, nous ajouterons des effets Web 2.0 et nous intégrerons d’autres services pour rendre l’application complète. Avant de pouvoir commencer notre projet, cependant, nous devons définir un plan de développement avec une sorte de liste de fonctionnalités pour nous guider..

Voici une petite liste des fonctionnalités principales que nous allons discuter et inclure dans notre application terminée:

  • Système protégé avec, au minimum, des capacités pour un auteur
  • Les fonctions de publication incluront les fonctionnalités de commentaires, fourniront des rétroliens de blogs et permettront l'inclusion d'images et de téléchargements.
  • Moteur de recherche de texte intégral utilisant Sphinx
  • Intégration à des services externes tels que Gravatar et Askimet Spam Protection / Spam Management
  • Améliorations de Javascript, notamment les fonctionnalités de l'éditeur WYSIWYG, Ajax Live Search, les aperçus de commentaires Ajax, le chargement rapide des fonctionnalités de publication / édition / suppression d'Ajax et la validation du formulaire Ajax
  • Intégration de l'application à Facebook pour permettre un développement rapide sur Facebook (cette fonctionnalité a notamment pour objectif d'envoyer des publications sur le fil d'actualités de Facebook et d'extraire des données personnelles de l'API de Facebook pour rendre le blog un peu plus personnel).

Dans l'article d'aujourd'hui, nous allons nous concentrer principalement sur le système de gestion des utilisateurs / auteurs, car il s'agit de l'endroit idéal pour apprendre les bases du code de contrôleur, de modèle et d'affichage. Une fois que nous avons appris ces bases, nous pouvons les implémenter ultérieurement pour les autres composants du système plus vaste..

Sans plus tarder, passons à CakePHP.

Étape 2: Modèles

Comme mentionné précédemment, les modèles interagissent avec la base de données sous-jacente du framework. Par défaut, CakePHP est livré avec un certain nombre de méthodes intégrées pour nous empêcher de réécrire le code afin d'implémenter des fonctionnalités communes. En plus des méthodes de lecture et d’écriture / de sauvegarde attendues, vous pouvez également utiliser des "méthodes magiques" comme trouverPar qui trouvera des lignes correspondant à un certain champ de requête. C'est une réelle amélioration par rapport aux requêtes "SELECT * FROM" classiques.

Notre système utilisateur pour cette itération de l'application sera assez basique. L'objectif principal étant un blog personnel, nous n'aurons qu'un auteur à la fois. Par souci d’extensibilité, nous stockons le ou les utilisateurs dans un tableau au cas où nous choisirions de développer ultérieurement un système utilisateur / autorisations complet ou d’ajouter manuellement plus d’auteurs. Notre fonctionnalité de base permettra la connexion, la déconnexion et la mise à jour de nos informations personnelles..

Nous ferons tout cela avec une petite table MySQL implémentée par l'instruction CREATE TABLE suivante:

CREATE TABLE 'auteurs' ('id' int (11) NON NUL auto_increment, 'nom d'utilisateur' varchar (255) NON NULL par défaut ", 'mot de passe' varchar (32) NON NULL par défaut", 'nom' par varchar (255) NON NULL default ", 'email' varchar (255) NOT NULL default", texte 'bio' NOT NULL, PRIMARY KEY ('id'))

Nous voudrons également un compte de départ de base, nous allons donc également insérer une ligne tant que nous y serons (le nom d'utilisateur et le mot de passe du compte de départ sont test / test):

INSERT INTO 'auteurs' ('nom d'utilisateur', 'mot de passe', 'nom', 'email', 'bio') VALEURS ('test', '098f6bcd4621d373cade4e832627b4f6', 'Test', '[email protected]', 'Bonjour monde… ');

Le but de la structure de la table est le suivant:

  • identifiant sera utilisé pour l'identifiant utilisateur unique lors du chargement du profil.
  • Nom d'utilisateur sera utilisé pour se connecter à la zone de gestion.
  • mot de passe sera un mot de passe haché md5 utilisé pour se connecter à la zone de gestion.
  • prénom sera utilisé dans les signatures et la page de l'auteur. C'est le nom d'affichage public car le nom d'utilisateur n'est pas affiché.
  • email sera utilisé pour toute fonctionnalité future (telle que la notification de commentaire).
  • bio sera utilisé pour stocker des informations biographiques sur un auteur (telles que les pages d'auteurs vues ici sur NETTUTS).

Nous devons maintenant créer le modèle. Pour ce faire, créez un nouveau fichier dans le / app / models / dossier nommé author.php avec le contenu suivant:

classe Author étend AppModel

var $ name = 'Auteur';

?>

Le modèle de cette fonctionnalité est en fait assez basique. Depuis la fonctionnalité dont nous avons besoin, comme findByUsername ou save est déjà couvert par les fonctions de Model (qui est étendue par AppModel), nous en avons terminé avec le côté du modèle. Ce fichier de couverture nous permet simplement d’interfacer avec la table Author.

Dans les sections suivantes, lorsque nous commencerons à ajouter des fonctionnalités de publication, nous devrons peut-être étendre les modèles..

Étape 3: Vues

Les vues sont principalement un mélange de HTML et aides. Dans d'autres systèmes, nous appellerions ces modèles. Les assistants génèrent un code commun ou une aide pour les tâches courantes. Certains types d'aide trouvés dans CakePHP sont les aides HTML et les aides à la pagination.

Pour établir des vues, créez un dossier dans / app / vues / appelé auteurs/ afin que nous puissions stocker tous nos points de vue. Notre première vue devrait s'appeler login.thtml avec le contenu suivant:

 

Erreur

Le nom d'utilisateur et le mot de passe ne correspondent pas. Veuillez réessayer et vérifier les informations saisies..

formTag ('/ authors / login /'); ?> input ('Auteur / nom d'utilisateur'); ?> mot de passe ('Auteur / mot de passe'); ?>
submit ("Login"); ?>

À la place d'utiliser balises nous utilisons l'un des aides pour générer des champs de saisie valides qui peuvent être utilisés dans nos contrôleurs. Nous mettons également un peu de contrôle d'erreur en haut du modèle au cas où l'utilisateur entrerait un nom d'utilisateur ou un mot de passe incorrect. La variable d'erreur est définie ultérieurement dans le contrôleur.

Maintenant que notre première action a un modèle derrière elle, nous pouvons passer aux autres.

La déconnexion n'a en réalité pas besoin de sa propre vue, car nous redirigerons simplement les utilisateurs vers la page d'index du blog et afficherons un message de réussite rapide. La mise à jour des informations de profil dans la gestion des utilisateurs nécessite un formulaire, nous aurons donc besoin d’écrire une vue pour cela..

Créez un modèle nommé manage.thtml avec le contenu suivant:

 

Erreur

Assurez-vous que toutes les informations requises ont été renseignées.

formTag ('/ authors / manage /'); ?> input ('Auteur / Nom'); ?>
input ('Auteur / email'); ?>
textarea ('Author / bio', array ('cols' => '60', 'rows' => '10')); ?>
submit ("Update"); ?>

Cette vue est très similaire à notre formulaire de connexion, sauf que nous gérons différents champs et que nous incluons une autre méthode d'assistance ($ html-> textarea) pour générer une zone de texte..

Génial! Maintenant que notre petit ensemble de vues est écrit, nous pouvons passer aux contrôleurs.

Étape 4: contrôleurs

Les contrôleurs agissent comme des directeurs de trafic. Ils acceptent les entrées, décident quoi faire avec, puis fournissent des instructions de traitement au reste du système. Ils constituent le cœur de l’application car ils prennent les données des modèles et les transmettent aux vues correctes à afficher..

Cette section traitera spécifiquement du paramétrage et de la lecture d’une session ainsi que de la mise à jour de la base de données. Nous allons également créer un contrôleur "parent" à partir duquel tous nos futurs contrôleurs hériteront..

Commencez par créer un fichier dans app / contrôleurs / nommé authors_controller.php. Maintenant, nous allons parcourir le code étape par étape.

redirect ('/');  fonction login () $ this-> set ('error', false); if (! empty ($ this-> data)) $ author = $ this-> Auteur-> findByUsername ($ this-> data ['Auteur'] ['nomutilisateur']); if (! empty ($ auteur ['Auteur'] ['mot de passe']]) && $ auteur ['Auteur'] ['mot de passe'] == md5 ($ this-> data ['Auteur'] ['mot de passe']] )) $ this-> Session-> write ('Auteur', $ auteur ['Auteur']); $ this-> redirect ('/');  else $ this-> set ('error', true); 

Notre fonction d'index est assez basique. Pour l'instant, nous allons simplement rediriger vers l'index de script en utilisant une fonction intégrée de CakePHP appelée "redirect".

Notre fonction de connexion est un peu plus avancée. Nous avons d’abord défini la variable error sur false pour empêcher PHP de rejeter une notification de variable non définie. Ensuite, nous vérifions si des données ont été envoyées. "$ this-> data" contient toutes les données d'entrée du formulaire de connexion et se présente sous le format $ this-> data ['CONTROLLER'] ['FIELD']. Nous voyons maintenant notre méthode magique "findByUsername". utilisé pour rechercher les lignes contenant le nom d'utilisateur de l'utilisateur qui vient de se connecter. Si nous avons une correspondance d'utilisateur, nous comparons ensuite les mots de passe et écrivons une session à l'aide du gestionnaire de session de CakePHP. En cas de problème, nous définissons "erreur" sur true afin que notre vue puisse gérer le message. Un système de connexion ne peut pas être beaucoup plus simple que cela!

 fonction logout () $ this-> Session-> delete ('Author'); $ this-> flash ('Vous avez été déconnecté.', '/');  

La fonction de déconnexion est encore plus simple. Nous utilisons la classe de session de CakePHP pour supprimer totalement la session, puis nous utilisons la méthode "flash" pour rediriger. La méthode flash est un peu différente de la méthode de redirection car nous sommes autorisés à renvoyer un message à l'écran. Cela devient utile car nous pouvons réellement informer les utilisateurs que quelque chose est arrivé.

Remarque: comme nous sommes toujours en mode de développement, l’écran flash ne sera pas automatiquement redirigé. Vous devez cliquer sur le texte pour aller à l'écran. Lorsque nous sommes en mode production, cet écran redirige pour nous.

 function manage () $ this-> set ('error', false); if (vide ($ this-> data)) $ this-> Auteur-> id = $ this-> Session-> read ('Author.id'); $ this-> data = $ this-> Auteur-> read ();  else if (empty ($ this-> data ['Auteur'] ['nom'])) || empty ($ this-> data ['Auteur'] ['email']) || empty ($ this- > data ['Author'] ['bio'])) $ this-> set ('error', true); $ this-> Author-> id = $ this-> Session-> read ('Author.id'); $ this-> data = $ this-> Auteur-> read ();  else $ this-> Auteur-> id = $ this-> Session-> read ('Author.id'); if ($ this-> Author-> save ($ this-> data ['Author'])) $ this-> flash ('Les informations de votre compte ont été mises à jour.', '/ authors / Acheter / /);  

Notre fonction la plus avancée pour ce contrôleur est la gérer une fonction. Une grande partie de la fonctionnalité est mise en œuvre à l'aide des techniques que nous venons d'introduire. Une chose à noter dans cette fonction est la définition de la variable $ this-> author-> id avant la sauvegarde et la lecture. Cela indique au modèle la ligne à traiter afin d'éviter toute tentative d'enregistrement ou d'insertion d'une nouvelle ligne. Nous traitons également plus de fonctionnalités de session en lisant l'identifiant du hachage.

Notre dernière étape consiste à protéger la page de gestion. Nous voulons seulement que les utilisateurs connectés voient cette page et nous pouvons fournir une protection avec une simple fonction de vérification. C’est une fonctionnalité dont nous aurons également besoin pour les futurs écrans; nous devons donc la stocker dans un lieu partagé. Comme mentionné précédemment, tous les contrôleurs CakePHP héritent d'un contrôleur appelé "AppController" qui est actuellement un fichier vierge se trouvant dans le répertoire. gâteau annuaire…

Nous allons créer un AppController spécifique à l'application en créant un fichier nommé "app_controller.php" dans le app / dossier et insérez le contenu suivant:

Session-> cocher ('Auteur')) $ this-> flash ('Vous devez être connecté pour le faire.', '/ Authors / login'); sortie; ?> 

Nous vérifions simplement la session et, si ce n’est pas le cas, nous envoyons l’utilisateur à l’écran de connexion. Cette fonction peut maintenant être utilisée dans n'importe quelle méthode de contrôleur.

Notre dernière étape consiste à appeler la fonction à partir de notre fonction de gestion. Nous ouvrons notre app / controller / authors_controller.php déposer et trouver:

 function manage () $ this-> set ('error', false);

et ajouter

$ this-> isLoggedIn ();

juste en dessous.

Étape: le tester

Les actions peuvent être testées et accessibles avec les URL suivantes:

  • http: //votresite.tld/auteurs / login /
  • http: //votresite.tld/auteurs / gérer /
  • http: //votresite.tld/auteurs / logout /

Le nom d'utilisateur du compte est test et le mot de passe est test.

Fermeture

Cet article était destiné à introduire quelques fonctions de base de CakePHP avec des exemples dans le contexte de la construction d'une application de blog personnel. Nous avons commencé avec certaines fonctionnalités de page utilisateur / auteur pour introduire les concepts de base du développement d'applications avec CakePHP avant de passer (dans le prochain tutoriel) à l'écriture du post-contrôleur. De cette façon, nous comprendrons mieux comment tout ce qui est dans le cadre s’intègre. Nous avons encore beaucoup de chemin à parcourir avant la fin de l'application de notre blog, alors préparez-vous à plonger profondément dans CakePHP afin de pouvoir utiliser toutes les fonctionnalités de publication et de commentaire du blog pour la prochaine fois!