构建自己的PHP框架(MVC)
完整项目地址:https://github.com/Evai/Aier
规划文件夹
新建 MFFC/app 文件夹,在 app 中创建 controllers、models、views 三个文件夹,开始正式开始踏上 MVC 的征程。
使用命名空间
新建 controllers/BaseController.php 文件:
<?php
class BaseController { public function __construct() { } }
新建 controllers/HomeController.php 文件:
<?php class HomeController extends BaseController { public function home() { echo 'home'; } }
增加一条路由: Macaw::get('/home', 'HomeController@home');,打开浏览器直接访问 http://127.0.0.1:80/,出现以下提示:
Fatal error: Class 'HomeController' not found in /Library/WebServer/Documents/wwwroot/MFFC/vendor/codingbean/macaw/Macaw.php on line 93
为什么没找到 HomeController 类?因为我们没有让他自动加载,修改 composer.json 为:
{ "require": { "codingbean/macaw": "dev-master" }, "autoload": { "classmap": [ "app/controllers", "app/models" ] } }
运行 composer dump-autoload,稍等片刻,刷新,你将看到以下内容:
恭喜你,命名空间使用成功!
连接数据库
新建 models/Article.php 文件,内容为(数据库密码和数据库名称请自行更改):
class Articles { public static function first() { $servername = "localhost"; $username = "root"; $password = "admin123"; // 创建连接 $conn = mysqli_connect($servername, $username, $password); // 检测连接 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } $conn->set_charset('utf8'); $conn->select_db('articles'); $result = $conn->query("SELECT * FROM article limit 1"); if ($row = $result->fetch_assoc()) { var_dump($row); } $conn->close(); } }
修改 controllers/HomeController.php 文件:
<?php class HomeController extends BaseController { public function home() { Articles::first(); } }
刷新,这时候会得到 Article 类未找到的信息,因为我们没有更新自动加载配置:
composer dump-autoload
然后,刷新!你将看到结果。
恭喜你!MVC 中的 M 和 C 都已经实现!接下来我们开始调用 V (视图)。
调用视图
修改 HomeController:
<?php class HomeController extends BaseController { public function home() { require dirname(__FILE__).'/../views/home.php'; } }