构建自己的小型PHP框架(二)

前面框架已经可以通过路由访问了,我们总不可能把业务写在各个路由的回调里面吧,所以需要按一般框架实现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

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();

配置后的路由


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

上一篇:记录golang常用库-json处理

下一篇:linux环境PostgreSQL安装

关注公众号

发表评论