wormhit/slim-api

基于 slim 和 pimple 的 PHP API 框架

v1.0.1 2014-05-17 09:09 UTC

This package is auto-updated.

Last update: 2024-09-17 05:18:37 UTC


README

基于 slimpimple 的 API 框架

Build Status Scrutinizer Quality Score Coverage Status Latest Stable Version License

安装

创建 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 服务器时的终端输出。