synapsestudios/synapse-base

此软件包已被弃用且不再维护。没有推荐替代软件包。

API模板的基本代码


README

Build Status

概述

Synapse Base 是一个用于在 Silex 微型框架中构建 PHP 应用的引导库。它旨在为提供和消费 JSON 的 REST API 提供一个有见地的、安全的起点。

此库使用以下工具和库为您的 REST API 提供一个有见地的、安全的起点

设置您的项目

快速入门

对于新项目,只需将 API 模板 克隆为起点,并执行 composer install

对库的期望

架构期望

  1. 用于应用数据的 MySQL 服务器
  2. 用于作业队列的 Redis 服务器

项目代码库期望

(如果您仅使用 API 模板,则不需要了解大多数内容。)

  1. 一些命名常量应 存在
  2. 应该设置 APP_ENV 环境变量。(设置为 developmentproductionstaging。)
  3. [APPDIR]/config/ 中应设置特定的配置文件。要设置环境特定的配置覆盖,请将相同的配置文件放入 [APPDIR]/config/development/ 等。 参见 API 模板示例。

设置必需的配置文件

默认配置文件 在 DocBlocks 中包含足够的文档。只需阅读这些即可。

数据库交互

数据库安装和迁移

使用API模板中的控制台工具来执行数据库安装和迁移。

  • 安装一个干净的数据库副本:./console install:run --drop-tables
  • 创建一个迁移:./console migrations:create "添加库存表"
  • 安装所有尚未应用的迁移:./console migrations:run(或者直接./console install:run
  • 从数据库当前状态生成新的数据库安装文件:./console install:generate

创建新的迁移时,它会被创建在[APPDIR]/src/Application/Migrations/。使用Zend DB适配器执行查询,例如:这样

关于生成数据库安装文件的注意事项:运行./console install:generate时,会生成2个文件 -- (1) 一个基于当前数据库快照的表结构的DbStructure.sql文件,以及(2) 包含特定表数据的DbData.sql文件。在安装配置中指定要哪些表。

如何从数据库中读取/写入

使用这样的映射器执行数据库查询。数据库结果以实体形式返回。

身份验证/登录系统

bshaffer的OAuth2服务器用于身份验证。用户通过POST将电子邮件/密码发送到/oauth/token,并收到一个访问令牌,可用于发出请求。(符合OAuth2规范。)

为了保护端点,使用了Symfony安全模块。使用防火墙将端点限制为仅限登录用户或公开。使用访问规则使端点仅对具有特定角色的用户可访问。阅读Symfony安全文档以获取更多详细信息。

注意

  1. 当在防火墙中指定监听器时('anonymous' => true'oauth-optional' => true),运行的代码在监听器中。(这些是在OAuth2\SecurityServiceProvider中添加的。)
  2. 有一个通配符防火墙,它将所有端点限制为受OAuth(非公开)保护,除非另有说明。更多详细信息在这里

实用类

数组助手

$people = [
    ['name' => 'Linus',   'age' => 10],
    ['name' => 'Brendan', 'age' => 11],
    ['name' => 'Rasmus',  'age' => 12, 'colors' => ['Red', 'Green', 'Blue']],
];

Arr::get($people[0], 'name');     // Linus
Arr::get($people[3], 'name');     // null
Arr::pluck($people, 'name');      // ['Linux', 'Brendan', 'Rasmus'];
Arr::path($people, '2.colors.1'); // Green

数据对象

使用这些来封装概念并在您的应用程序中类型提示。

class Car extends DataObject
{
    protected $object = [
        'make'    => null,
        'model'   => null,
        'year'    => null,
        'totaled' => false,
    ];
}

$car = new Car(['make' => 'Toyota']);
$car->setModel('Corolla');
$car->getMake();    // Toyota
$car->getModel();   // Corolla
$car->getYear();    // null
$car->getTotaled(); // false

// These are helpful for typehinting purposes to make your code more robust
function purchaseCar(Car $car) {
    // Do stuff
}

测试助手

提供了各种针对控制器、映射器等的抽象PHPUnit测试用例,以简化测试过程。