今天,我挑戰自己使用純 PHP 實作 Laravel MVC(模型、視圖、控制器)方法。為了解決這個問題,我在專案的視圖部分使用了標準的 Laravel Blade 模板引擎,但沒有安裝 Laravel,因為我的專案是純粹的 PHP。以下是我實現這種整合的方法;
我先使用以下 Composer 指令安裝 JensSegers 名為 Blade 的軟體包:
composer require jenssegers/blade
這個套件允許 Blade 模板引擎作為獨立套件使用,使其與任何 PHP 專案相容,而不僅僅是 Laravel。
接下來,我執行以下命令將套件的照亮/視圖依賴項更新為版本 11.7.0,因為該套件無法在 11.7.0 以下的版本中正常工作:
composer require illuminate/view:11.7.0
然後,我建立了一個名為「pdotest」的資料庫,其中包含一個名為「post」的表,其中包含「name」和「body」列。我分別用數據填充此表(“這是使用Blade 模板引擎顯示的資料庫中的帖子名稱”,“這是使用Blade 模板引擎顯示的資料庫中的帖子正文”),並通過在我的根目錄中創建Database.php 檔案來連接到它專案並輸入以下程式碼:
<?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(); } } } ?>
接下來,我為所有資料庫操作建立了一個名為「Models」的目錄。在這個目錄中,我建立了一個名為 Post.php 的檔案來處理「post」表上的操作。在此文件中,我定義了一個名為 post 的方法,用於透過 ID 檢索帖子,如下所示:
<?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(); } } ?>
接下來,我創建了 index.php 來充當路由器,連接我的控制器、視圖和模型。在其中,我匯入了所有視圖和快取路徑,我將建立這些路徑來放置我的 Blade 視圖和快取檔案。然後這些路徑被傳遞給 Blade 類,該類是我們一開始安裝的 Blade 套件附帶的。然後,我將此 Blade 實例傳遞給我將創建的 PostController 類,並呼叫該類的 post 方法,以便將來透過其 ID 取得貼文。
<?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(); ?>
然後,我在專案的根目錄下建立了一個「controllers」目錄。在其中,我從index.php(路由器)接收了 Blade 變量,調用 Post 模型的 getPost 方法以通過其 ID 獲取帖子,並將該帖子傳遞到名為“主頁”的 Blade 視圖。
<?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]); } } ?>
然後,我在專案的根目錄下建立了一個名為「views」的目錄和一個名為 homepage.blade.php 的檔案。在這個文件中,我只是顯示了從 PostController 傳遞的帖子的名稱,如下所示:
<h1>{{$post['name']}}</h1>
最後,我在專案根目錄中建立了一個「cache」目錄來儲存 Blade 快取文件,這有助於提高專案的效能。
現在,當您在瀏覽器中造訪http://localhost/laravel-blade-without-laravel/index.php 時,您將看到貼文的名稱顯示為「這是使用Blade 範本顯示的資料庫中的帖子名稱”發動機。 ”
感謝您關注這篇關於在純 PHP 專案中使用 Laravel Blade 模板引擎的文章。我希望它對您的發展之旅有所幫助。我叫 Waziri Ally Amiri,是來自坦尚尼亞莫希的 Web 開發人員。我專注於使用 Laravel,並且喜歡幫助其他人開始使用這個強大的框架。如果您有任何疑問或需要進一步協助,請隨時聯繫。
以上是如何在純 PHP 專案中使用 Laravel Blade 模板引擎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!