SlimPhp框架的使用(二)编写接口
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
文件,用来处理网络访问
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
,然后在输入网址,总算可以了。