SlimPhp框架的使用(二)编写接口

1,142 阅读2分钟

原文链接
SlimPhp使用路由管理页面的访问,Slim本身并没有MVC模式,但是我们可以通过Controller来实现MVC的效果,因为我们的目标是编写接口,所以现在我们不考虑View层,只解决MC。
推荐查看akrabat的简单Slim项目理解Slim的运行逻辑Glihub地址:Slim-Bookshelf

文件结构

项目的文件目录推荐如下:#表示一级目录,##表示二级目录

#app    ----项目主要目录
##HelloWordController.php    ----测试用的controller
##dependencies.php    ----添加需要使用的controller文件
##routes.php    ----定义路由
##setting.php    ----设置的配置文件
#public    ----用户可以访问的目录
##index.php    ----index页面
#vendor    ----使用composer自动生成的目录
##composer.json    ----composer配置文件
##composer.lock    ----composer文件不需要管

创建目录

按照上面的目录结构创建文件的目录app和public,vendor目录使用composer命令自动生成,所以不需要我们创建。

安装Slim

Slim的安装可以看上一篇文章

编辑composer.json

编辑composer.json文件,添加autoload地址,然后执行终端执行composer update

{
    "require": {
        "slim/slim": "^3.0"
    },
    "autoload": {
        "psr-4":{
          "Sample\\":"app" //“Sample” 是自己定义的一个命名空间,"app"对应的是文件路径
        }
    }
}

编辑Controller文件

在app文件夹里面创建HelloWordController.php文件,先把HelloWordController代码贴上来

namespace Sample\Controllers; //命名空间,很重要,引用文件都需要使用这个路径

use \interop\Container\ContainerInterface;

final class HelloWordController
{
    protected $app;

    public function __construct(ContainerInterface $ci)
    {
        $this->app = $ci;
    }
    /**
    * 测试的方法
    **/
    public function say($request, $response, $params)
    {
        echo 'Welcome Slim';
    }
}

编辑index.php文件

在public文件夹里面创建index.php文件,用来处理网络访问

public文件夹里面创建index.php文件,用来处理网络访问
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '../vendor/autoload.php'; //自动加载的脚本

$settings = require '../app/setting.php'; //引入设置的配置文件
$app = new \Slim\App($settings);

require '../app/dependencies.php'; //引入controller配置文件
require '../app/routes.php'; //引入路由管理文件

$app->run(); //执行

编写设置配置文件

在app目录下面创建setting.php文件,根据自己的需求编写配置文件

return [
    'settings' => [
        'addContentLengthHeader' => false,
        'displayErrorDetails' => true //开启错误提示
    ],
];

编写Controller配置文件

在app文件夹里面创建dependencies.php
注意:所有的文件需要使用命名空间的路径,如“Sample\Controllers\HelloWordController”

$container = $app->getContainer();

//hello
$container['Sample\Controllers\HelloWordController'] = function ($c) {
    return new \Sample\Controllers\HelloWordController($c);
};

添加路由管理文件

在app文件夹里面创建routes.php文件

//处理域名/hello地址的访问,跳转到
HelloWordController
的say方法
$app->get('/hello','Sample\Controllers\HelloWordController:say');

完毕?

那么现在我们访问网址,是不是就会出现我们期待的东西呢?然而事实是不是的,提示controller not fund。这是什么bug??WTF,我们还需要执行一步,在终端输入composer dump-autoload -o,然后在输入网址,总算可以了。