Hari ini, saya mencabar diri saya untuk melaksanakan pendekatan Laravel MVC (Model, View, Controller) menggunakan PHP vanila tulen. Untuk menangani perkara ini, saya menggunakan enjin templat Laravel Blade standard untuk bahagian paparan projek, tetapi tanpa memasang Laravel kerana projek saya adalah PHP vanila semata-mata. Begini cara saya mencapai penyepaduan ini;
Saya mulakan dengan memasang pakej yang dipanggil Blade oleh JensSegers menggunakan arahan Komposer berikut:
composer require jenssegers/blade
Pakej ini membolehkan enjin templat Blade digunakan sebagai pakej kendiri, menjadikannya serasi dengan mana-mana projek PHP, bukan hanya Laravel.
Seterusnya, saya menjalankan arahan berikut untuk mengemas kini kebergantungan illuminate/view pakej kepada versi 11.7.0, kerana pakej tidak berfungsi dengan betul dengan versi di bawah 11.7.0:
composer require illuminate/view:11.7.0
Kemudian, saya mencipta pangkalan data yang dipanggil "pdotest" dengan jadual yang dipanggil "post," yang mempunyai lajur "nama" dan "badan." Saya mengisi jadual ini dengan data ('ini adalah nama siaran daripada pangkalan data yang dipaparkan menggunakan enjin templat Blade', 'ini adalah badan siaran daripada pangkalan data yang dipaparkan menggunakan enjin templat Blade') dan disambungkan kepadanya dengan mencipta fail Database.php dalam akar saya projek dan letakkan kod berikut:
<?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(); } } } ?>
Seterusnya, saya mencipta direktori yang dipanggil "Model" untuk semua manipulasi pangkalan data. Di dalam direktori ini, saya mencipta fail bernama Post.php untuk mengendalikan operasi pada jadual "post". Dalam fail ini, saya mentakrifkan kaedah yang dipanggil siaran untuk mendapatkan semula siaran dengan IDnya, seperti yang ditunjukkan di bawah:
<?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(); } } ?>
Seterusnya, saya mencipta index.php untuk bertindak sebagai penghala, menyambungkan pengawal, paparan dan model saya. Di dalamnya, saya mengimport semua pandangan dan laluan cache saya, yang akan saya buat untuk meletakkan pandangan Blade dan fail cache saya. Laluan ini kemudiannya dihantar ke kelas Blade, yang disertakan dengan pakej Blade yang kami pasang pada mulanya. Saya kemudian menyerahkan contoh Blade ini kepada kelas PostController, yang akan saya buat, dan memanggil kaedah siaran kelas itu untuk mendapatkan siaran dengan IDnya pada masa hadapan.
<?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(); ?>
Kemudian, saya mencipta direktori "pengawal" di akar projek saya. Di dalamnya, saya menerima pembolehubah Blade daripada index.php (penghala), memanggil kaedah getPost model Post untuk mendapatkan siaran dengan IDnya dan menghantar siaran itu ke paparan Blade yang dipanggil "halaman utama."
<?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]); } } ?>
Kemudian, saya mencipta direktori yang dipanggil "views" dan fail bernama homepage.blade.php di akar projek. Di dalam fail ini, saya hanya memaparkan nama siaran yang diluluskan daripada PostController, seperti yang ditunjukkan di bawah:
<h1>{{$post['name']}}</h1>
Akhir sekali, saya mencipta direktori "cache" dalam akar projek saya untuk menyimpan fail cache Blade, yang membantu meningkatkan prestasi projek saya.
Sekarang, apabila anda melawati http://localhost/laravel-blade-without-laravel/index.php dalam penyemak imbas anda, anda akan melihat nama siaran dipaparkan sebagai "ini adalah nama siaran daripada pangkalan data yang dipaparkan menggunakan templat Blade enjin."
Terima kasih kerana mengikuti siaran ini menggunakan enjin templat Laravel Blade dalam projek PHP vanila tulen. Saya harap ia membantu anda dalam perjalanan pembangunan anda. Nama saya Waziri Ally Amiri, pembangun web dari Moshi, Tanzania. Saya pakar dalam bekerja dengan Laravel dan suka membantu orang lain bermula dengan rangka kerja yang berkuasa ini. Jangan ragu untuk menghubungi jika anda mempunyai sebarang pertanyaan atau memerlukan bantuan lanjut.
Atas ialah kandungan terperinci Bagaimana Menggunakan Enjin Templat Bilah Laravel dengan Projek PHP Vanila Tulen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!