wormhit / slim-api
基于 slim 和 pimple 的 PHP API 框架
Requires
- php: >=5.3
- phpunit/phpunit: 4.*
- pimple/pimple: 2.*@dev
- satooshi/php-coveralls: 0.6.*
- slim/slim: 2.*
This package is auto-updated.
Last update: 2024-09-17 05:18:37 UTC
README
安装
创建 composer.json 文件
{ "require": { "wormhit/slim-api": "dev-master" }, "autoload": { "psr-4": {"Api\\": "src/"} } }
下载 composer 并运行 php composer.phar install
执行
可以使用内置的 php 服务器 快速启动应用程序。
索引
在启动服务器之前,编辑您的 index.php 文件
<?php require 'vendor/autoload.php'; $configData = array(); //$configData = array(SlimApi\Kernel\Config::ROUTING => 'Api\Module\Routing'); //$configData = include 'config/config.php'; $config = new SlimApi\Kernel\Config(); $container = new SlimApi\Kernel\Container(); //$container = new Api\Module\Container(); $container ->setConfig($config->setConfig($configData)) ->getModule() ->run();
服务器
在终端中执行命令以启动应用程序
php -S localhost:8000
并将浏览器指向 https://:8080
最初应用程序将返回装饰的 404 页面。
路由
通过在 index.php 中取消注释 $configData = array(..) 行来设置路由。然后创建新的路由类。
在 composer.json 中设置了命名空间 \Api 和路径 src/
<?php # src/Module/Routing.php namespace Api\Module; use SlimApi\Kernel\Routing as KernelRouting; class Routing extends KernelRouting { public function init() { $container = $this->getContainer(); $slim = $this->getSlim(); $slim->map( '/', function() use ($container, $slim) { /** @var \Api\Controller\Index\IndexController $controller */ $controller = $container->get('controller.index.index'); $slim->response = $controller->getResponse(); } ) ->via('GET'); return $this; } }
此设置将告诉 slim 框架匹配 "/" 请求。当请求匹配时,将执行适当的闭包函数。
通常闭包将创建控制器并从其中获取响应对象。
SlimApi 使用 pimple 将对象保存在一个地方。
在这种情况下,代码正在向容器请求 'controller.index.index' 类。
容器
通过扩展 SlimApi\Kernel\Container 创建自定义容器。
在 index.php 中取消注释行
$container = new Api\Module\Container();
并创建自定义容器类
<?php # src/Module/Container.php namespace Api\Module; use SlimApi\Kernel\Container as KernelContainer; class Container extends KernelContainer { public function initialize() { parent::initialize(); $this->initControllers(); } private function initControllers() { $this['controller.index.index'] = function () { return new \Api\Controller\Index\IndexController(); }; } }
现在您的脚本将能够找到 'controller.index.index' 键。
仍然,现在在闭包中找不到控制器类,因为它尚不存在。
控制器
控制器通常应该返回 Slim\Http\Response 对象。然后将由自定义路由处理此响应。在这种情况下为 Api\Module\Routing。
创建索引控制器
<?php # src/Controller/Index/IndexController.php namespace Api\Controller\Index; use Slim\Http\Response; class IndexController { public function getResponse() { $response = new Response(); $response->headers->set('Content-Type', 'application/json; charset=utf-8'); $response->setBody(json_encode(array('apple' => 'green'), JSON_UNESCAPED_UNICODE)); return $response; } }
现在刷新 https://:8080,你应该看到 JSON 响应。
测试
您可以使用命令测试 simple-api 文件
./vendor/bin/phpunit -c vendor/wormhit/slim-api/tests/phpunit.xml
库非常简单且易于理解。如果预期不符,请检查运行 php 服务器时的终端输出。