Aujourd'hui, je me suis mis au défi d'implémenter une approche Laravel MVC (Model, View, Controller) en utilisant du PHP pure vanilla. Pour résoudre ce problème, j'ai utilisé le moteur de création de modèles standard Laravel Blade pour la partie affichage du projet, mais sans installer Laravel puisque mon projet est purement PHP vanille. Voici comment j’ai réalisé cette intégration ;
J'ai commencé par installer un package appelé Blade par JensSegers en utilisant la commande Composer suivante :
composer require jenssegers/blade
Ce package permet au moteur de création de modèles Blade d'être utilisé comme un package autonome, ce qui le rend compatible avec n'importe quel projet PHP, pas seulement Laravel.
Ensuite, j'ai exécuté la commande suivante pour mettre à jour la dépendance illuminate/view du package vers la version 11.7.0, car le package ne fonctionne pas correctement avec les versions inférieures à 11.7.0 :
composer require illuminate/view:11.7.0
Ensuite, j'ai créé une base de données appelée "pdotest" avec une table appelée "post", qui comporte les colonnes "name" et "body". J'ai rempli cette table avec des données (« ceci est le nom de la publication de la base de données affichée à l'aide du moteur de modèle Blade », « ceci est le corps de la publication de la base de données affichée à l'aide du moteur de modèle Blade ») respectivement et je m'y suis connecté en créant le fichier Database.php à la racine de mon projet et mettez le code suivant :
<?php class Database { private $host = "localhost"; private $database ="pdotest"; private $username = "root" ; private $password = ''; public function connect(){ try { $conn = new PDO("mysql:host=$this->host;dbname=$this->database",$this->username,$this->password); // $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // $conn = $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $conn; } catch (PDOException $e) { echo "Connection failed: " . $e->getMessage(); } } } ?>
Ensuite, j'ai créé un répertoire appelé "Modèles" pour toutes les manipulations de bases de données. Dans ce répertoire, j'ai créé un fichier nommé Post.php pour gérer les opérations sur la table "post". Dans ce fichier, j'ai défini une méthode appelée post pour récupérer une publication par son identifiant, comme indiqué ci-dessous :
<?php require './Database.php'; class Post { public $conn; private $table="post"; public function __construct() { $this->conn = (new Database)->connect(); // Access directly (less secure) } public function getPost($id){ $stmt= "SELECT * FROM $this->table WHERE id = :id"; $stmt = $this->conn->prepare($stmt); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->execute(); return $result = $stmt->fetch(); } } ?>
Ensuite, j'ai créé index.php pour agir comme un routeur, connectant mon contrôleur, ma vue et mon modèle. À l'intérieur, j'ai importé toutes mes vues et chemins de cache, que je vais créer pour placer mes vues Blade et mes fichiers de cache. Ces chemins ont ensuite été transmis à la classe Blade, fournie avec le package Blade que nous avons installé au début. J'ai ensuite transmis cette instance Blade à la classe PostController, que je vais créer, et j'ai appelé la méthode post de cette classe pour obtenir une publication par son ID à l'avenir.
<?php require __DIR__ . '/vendor/autoload.php'; use Jenssegers\Blade\Blade; require 'Controllers/ControllerPost.php'; $views = __DIR__ . '/views'; $cache = __DIR__ . '/cache'; if (!is_dir($cache)) { mkdir($cache, 0755, true); } $blade = new Blade($views, $cache); // Simulate routing (In a real application, use a routing library) $controller = new PostController($blade); $controller->post(); ?>
Ensuite, j'ai créé un répertoire "controllers" à la racine de mon projet. À l'intérieur, j'ai reçu la variable Blade d'index.php (le routeur), appelée la méthode getPost du modèle Post pour obtenir une publication par son ID, et j'ai transmis cette publication à une vue Blade appelée « page d'accueil ».
<?php require 'Models/Post.php'; class PostController{ protected $blade; public function __construct($blade) { $this->blade = $blade; } public function post(){ $post = (new Post)->getPost(1); echo $this->blade->render('homepage', ['post' => $post]); } } ?>
Ensuite, j'ai créé un répertoire appelé "views" et un fichier nommé homepage.blade.php à la racine du projet. Dans ce fichier, j'ai simplement affiché le nom de la publication transmise depuis le PostController, comme indiqué ci-dessous :
<h1>{{$post['name']}}</h1>
Enfin, j'ai créé un répertoire "cache" à la racine de mon projet pour stocker les fichiers de cache Blade, ce qui contribue à améliorer les performances de mon projet.
Maintenant, lorsque vous visitez http://localhost/laravel-blade-without-laravel/index.php dans votre navigateur, vous verrez le nom de la publication affiché sous la forme « ceci est le nom de la publication de la base de données affichée à l'aide du modèle Blade. moteur."
Merci d'avoir suivi cet article sur l'utilisation du moteur de modèles Laravel Blade dans un projet PHP purement vanille. J'espère que cela vous aidera dans votre parcours de développement. Je m'appelle Waziri Ally Amiri, un développeur Web de Moshi, en Tanzanie. Je me spécialise dans le travail avec Laravel et j'aime aider les autres à démarrer avec ce framework puissant. N'hésitez pas à nous contacter si vous avez des questions ou si vous avez besoin d'aide supplémentaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!