前面框架已经可以通过路由访问了,我们总不可能把业务写在各个路由的回调里面吧,所以需要按一般框架实现MVC.
新增目录application,application目录下新建model,controller,view,开始我们的MVC
进入controller,新增类CommonController
<?php
namespace Application\controller;
class CommonController
{
public $params = [];
public function __construct()
{
$this->params = $_POST;
}
}
?>
新增类IndexController继承CommmonController
<?php
namespace Application\controller;
class IndexController extends CommonController
{
public function Welcome()
{
echo "hello";
}
}
?>
打开config/routes.php,配置路由指向Controller
原来的路由
<?php
use NoahBuscher\Macaw\Macaw;
Macaw::get('/', function() {
echo "success";
});
Macaw::get('(:all)', function($error) {
echo 'routes fail'.$error;
});
Macaw::dispatch();
?>
配置后的路由
<?php
use NoahBuscher\Macaw\Macaw;
Macaw::get('index/welcome', 'Application\controller\IndexController@Index');
Macaw::get('(:all)', function ($fu) {
echo 'invalid routes' . $fu;
});
Macaw::dispatch();
?>
访问下http://127.0.0.14016/index/welcome,结果
Class 'Application\controller\IndexController' not found
为什么呢,原来我们框架还没配置PSR-4规范(也可以用PSR-0规范去处理,但是不推荐)
打开composer.json,配置命名空间指向目录
修改前
{
"name": "root/sh_framework",
"require": {
"noahbuscher/macaw": "dev-master"
}
}
修改后
{
"name": "root/framework",
"require": {
"noahbuscher/macaw": "dev-master"
},
"autoload": {
"psr-4": {
"Application\\": "application/"
}
}
}
运行
/usr/local/bin/php composer.phar dump-autoload
这个时候,就把我们的命名空间指向到对应的目录里面了,继续访问上面的路由看看会不会输出:hello
我们的model也可以使用了,一个简单的api框架已完成。
我们的view可以直接PHP输出,如在view目录下新建welcome.php
<?php
echo "这是一个view";
?>
修改下IndexController的welcome方法,require你的welcome.php
<?php
namespace Application\controller;
class IndexController extends CommonController
{
public function Welcome()
{
require dirname(__FILE__).'/../view/wecome.php';
}
}
?>
结果会输出:这是一个view。
利用composer引入各种你需要的类库
当我们需要操作mongodb扩展的时候
/usr/local/php/bin/php composer.phar require mongodb/mongodb
当我们需要http请求的时候
/usr/local/php/bin/php composer.phar require guzzlehttp/guzzle
当我们需要操作redis的时候
/usr/local/php/bin/php composer.phar require /usr/local/php/bin/php composer.phar require guzzlehttp/guzzle
至此,一个简单的PHP框架搭建完成。可以继续在这基础上完善自己额外需要的功能,比如加入中间件,加入验证等