Comment créer une petite application Web avec CakePHP sur un VPS (Partie 1)

De Get Docs
Aller à :navigation, rechercher

À propos de CakePHP

CakePHP est un framework PHP puissant et robuste construit autour du paradigme de programmation Model-View-Controller (MVC). En plus de la manière flexible dont vous pouvez l'utiliser pour créer votre application, il fournit une structure de base pour organiser les fichiers et les noms de table de base de données - en gardant tout cohérent et logique.

Dans le dernier tutoriel, nous avons vu comment installer CakePHP sur votre VPS et faire une configuration initiale. De plus, nous avons déjà mis en place une base de données qui servira à notre petite application Web que nous allons commencer dans ce tutoriel et terminer dans le suivant. Le but est donc de jouer un peu avec CakePHP pour mieux comprendre comment vous pouvez l'utiliser pour construire l'application que vous souhaitez. Nous passerons en revue certains des principaux concepts (contrôleurs, modèles, vues, etc.) et utiliserons des exemples afin de démontrer ce qu'ils sont. À la fin, nous aurons une petite application qui effectue des opérations CRUD (créer, lire, mettre à jour, supprimer) sur notre table de base de données.

Ce didacticiel suppose que vous avez suivi toutes les étapes décrites dans le dernier. Cela signifie avoir un accès en ligne de commande à votre propre VPS exécutant la pile LAMP et avoir déjà installé et configuré CakePHP. En d'autres termes, il continuera à partir de là où le didacticiel précédent s'est terminé.

Si vous vous souvenez, l'état de notre application était une simple installation de CakePHP dans le dossier /var/www/project et une base de données appelée cake qui contient une table appelée posts[ X192X] qui contient actuellement une ligne. Entrons dans notre ligne de commande mysql et ajoutons une autre ligne :

INSERT INTO posts (title,body,created)
    VALUES ('Another title', 'Another body text', NOW());

Maintenant que nous avons 2 lignes, nous pouvons continuer et commencer à utiliser CakePHP pour interagir avec ces données. Mais avant, quelques mots sur les conventions de nommage.

Conventions de nommage

CakePHP fournit quelques fonctionnalités intéressantes si vous suivez les conventions de nommage qu'il propose. Cela sert également à maintenir la logique et la cohérence de votre application. Par exemple, les noms de Controller doivent être en CamelCased, doivent être au pluriel, se terminer par le mot Controller (par exemple PostsController) et être stockés dans des fichiers nommés de la même manière (PostsController .php).

Les noms de classe de modèle, en revanche, sont au singulier et reflètent le modèle de données individuel (Post). De plus, la classe Model - si elle est nommée selon la convention - en déduira automatiquement que ses données résident dans la table de la base de données portant le même nom au pluriel (posts dans ce cas) et qu'elle sera utilisée par le Controller avec le même nom au pluriel et avec le mot Controller à la fin (dans notre cas PostsController).

Ceci est juste une courte introduction, pour plus d'informations sur les conventions dans CakePHP, vous pouvez visiter cette page.

Le modèle

Les classes Model constituent la couche métier de votre application car elles sont utilisées pour interagir avec vos données. Dans CakePHP, les Models représentent généralement une table de base de données, mais ils peuvent également être utilisés pour accéder à d'autres types de données. A cet égard, les Modèles sont vos modèles de données (un article de blog, un commentaire, un utilisateur sont par exemple des modèles de données) et leur déclaration va dans des fichiers situés dans le dossier /app/Model.

Dans notre application, nous suivrons les conventions de dénomination, nous nommerons donc notre classe Model Post et la placerons dans un fichier appelé Post.php situé dans l'app/Model[X177X ] dossier. De cette façon, il saura automatiquement qu'il doit utiliser la table posts dans notre base de données et sera utilisé par le PostsController.

Alors allons-y et créons le fichier et plaçons-le dans la déclaration de classe suivante par laquelle nous étendons la classe CakePHP Model par défaut pour en créer une pour nos articles de blog (assurez-vous d'ajouter la balise d'ouverture PHP au début du fichier):

class Post extends AppModel {
}

Enregistrez le fichier et quittez. En étendant la classe CakePHP Model par défaut et en suivant les conventions de nommage, c'est tout ce dont nous avons besoin pour des opérations CRUD simples sur cette table car CakePHP sait quoi faire. Vous devez cependant connaître les noms de méthodes qu'il utilise pour interroger la table afin de pouvoir les appeler dans vos contrôleurs. Nous en passerons quelques-uns ensuite.

Le controlle

Le contrôleur est utilisé pour acheminer une demande d'utilisateur dans le navigateur vers une action dans l'application. Il interprète ensuite la demande et utilise les modèles dont vous disposez pour fournir les informations demandées dans un format particulier (déterminé par des vues spécifiques).

Pour notre application, nous allons créer un Controller appelé PostsController dans un fichier appelé PostsController.php situé dans le dossier app/Controller. Nous collons ensuite initialement le code suivant (assurez-vous d'ajouter la balise d'ouverture PHP au début du fichier) :

class PostsController extends AppController {
    public $helpers = array('Form');
    
    public function index() {
        $this->set('posts', $this->Post->find('all'));
    }
}

Cette classe étend la classe CakePHP Controller par défaut et déclare un attribut ($helpers) dans lequel elle stocke certaines bibliothèques d'assistance CakePHP que nous utiliserons plus tard. Ensuite, il crée une méthode index() (celle qui est appelée par défaut si le contrôleur ne reçoit pas d'instructions sur la méthode à utiliser). Les méthodes dans CakePHP sont aussi appelées actions.

L'action index() que nous venons de créer utilise la méthode set() héritée du contrôleur parent pour transmettre les données du contrôleur à une vue (que nous allons créer dans une minute). Ces données sont stockées dans la variable posts et sont extraites du modèle Post qui utilise la méthode find('all') pour récupérer tous les messages de notre table de base de données. La raison pour laquelle le modèle nous est disponible en utilisant $this->Post est que nous avons suivi les conventions de nommage de CakePHP.

Maintenant, tout ce que nous avons à faire est de créer une vue et nous obtiendrons une page qui affiche tous nos messages.

La vue

Les Vues ont pour but d'afficher les données demandées par le Responsable du traitement et fournies par les Modèles. En utilisant Views, nous nous assurons de séparer la présentation de la logique métier de notre application. La tâche à accomplir consiste maintenant à créer un fichier View pour afficher les informations récupérées par notre méthode index() que nous avons déclarée ci-dessus.

Les vues CakePHP sont situées dans le dossier app/View à l'intérieur d'un dossier nommé d'après le Controller auquel elles appartiennent. Nous devrons ensuite mettre notre fichier View dans un dossier appelé Posts et le nommer index.ctp (d'après la méthode qui le demande). A l'intérieur, plaçons le code suivant :

&lth1>Blog posts&lt/h1>

&lt?php foreach ($posts as $post): ?>
&ltp>&lt?php echo $post['Post']['title']; ?> | &lt?php echo $post['Post']['created']; ?>
&lt?php endforeach; ?>
&lt?php unset($post); ?>

Cela produira une page très simple et laide, mais vous comprendrez. Il parcourt le tableau $posts (que nous avons défini et transmis dans la méthode set() du Controller) et affiche le titre et la date de création de nos publications à partir du tableau. Donc, pour obtenir ces informations, pointez votre navigateur vers www.example.com/project/posts/index ou simplement vers www.example.com/project/posts (comme index() est l'action par défaut qui est appelée si aucune méthode n'est spécifiée).

Et comme vous pouvez le voir, l'application peut déjà effectuer des opérations de lecture sans que vous ayez à écrire de code pour interroger la base de données.

Vous remarquerez que vos données sont présentées dans la mise en page par défaut de CakePHP (située dans app/View/Layouts). Toutes les vues font partie des mises en page et vous pouvez en créer autant que vous le souhaitez. Ensuite, tout ce que vous avez à faire est de spécifier dans votre contrôleur la disposition que vous souhaitez utiliser. Nous continuerons avec celui par défaut pour le reste de ce tutoriel car il est utilisé automatiquement. Plus d'informations sur les mises en page que vous pouvez lire ici .

Voyons maintenant comment afficher une publication individuelle dans une vue distincte.

Pour cela, nous devrons ajouter une autre méthode au PostsController. Donc ci-dessous où vous avez défini la méthode index(), collez le code suivant :

 public function view($id = null) {
        $post = $this->Post->findById($id);
        $this->set('post', $post);
    }

Ici, puisque nous recherchons un seul message, le modèle Post utilisera la méthode findById() et lui transmettra l'ID que nous voulons. Cet ID proviendra de l'action view() qui obtient un paramètre qui lui est transmis à partir de l'URL de la manière suivante : www.example.com/posts/view/1, 1 étant l'ID du poste dont nous avons besoin. Ensuite, la même méthode set() transmettra à la vue une variable appelée post qui contient les informations de publication extraites de la table. Simple. Cette méthode contient vraiment le strict minimum à ce stade. Il est recommandé d'implémenter également des vérifications pour voir si ce qui est transmis au contrôleur est un ID valide, etc.

Créons maintenant la vue elle-même dans le même dossier que celui que nous avons créé précédemment, nommé view.ctp dans lequel nous allons mettre le code suivant :

&lth1>&lt?php echo h($post['Post']['title']); ?>&lt/h1>
&ltp>&ltsmall>Created: &lt?php echo $post['Post']['created']; ?>&lt/small>&lt/p>
&ltp>&lt?php echo h($post['Post']['body']); ?>&lt/p>

Maintenant, si vous accédez à www.example.com/project/posts/view/1, vous obtiendrez le message avec l'ID 1 (le titre, la date de création et le corps).

Conclusion

Dans ce tutoriel, nous avons vu comment créer une opération de lecture de base sur nos données en utilisant CakePHP. Nous avons déclaré une classe Model pour nos modèles de données (les publications), utilisé un Controller pour demander ces données et créé quelques vues simples pour les afficher dans le navigateur. De plus, nous avons vu un peu la puissance de suivre les conventions de nommage implémentées par CakePHP. Ce faisant, nous n'avons pas eu besoin d'écrire de requêtes de base de données pour nos données et le modèle, le contrôleur et la vue ont été "connectés" facilement et sans que nous ayons à trop spécifier.

Dans le prochain tutoriel nous terminerons notre petite application en ajoutant la possibilité d'ajouter des posts dans le tableau, de les éditer et enfin de les supprimer.

Article soumis par : Danny