synapsestudios / synapse-base
API模板的基本代码
Requires
- bshaffer/oauth2-server-httpfoundation-bridge: v1.0
- bshaffer/oauth2-server-php: v1.0
- chrisboulton/php-resque: v1.2
- guzzle/guzzle: ~3.7
- ircmaxell/password-compat: dev-master
- jdesrosiers/silex-cors-provider: ~0.1
- lusitanian/oauth: ~0.2
- mailgun/mailgun-php: ^2.1
- mandrill/mandrill: 1.0.52
- monolog/monolog: ~1.18.2
- mustache/mustache: ~2.5.1
- php-http/guzzle6-adapter: ^1.0
- psr/log: v1.0.0
- rollbar/rollbar: ~0.14
- silex/silex: 1.2.5
- symfony/console: 2.5.2
- symfony/security: 2.5.2
- symfony/validator: 2.5.2
- tijsverkoyen/css-to-inline-styles: ^2.0@dev
- xamin/handlebars.php: ^0.10
- zendframework/zend-db: ~2.2.5
- zendframework/zend-stdlib: ~2.2.5
Requires (Dev)
- phpunit/phpunit: ~4.5
- sebastian/exporter: ~1.2
- squizlabs/php_codesniffer: dev-master
- symfony/browser-kit: 2.6.7
- symfony/dom-crawler: 2.6.7
- dev-master
- v5.0.5
- v5.0.4
- v5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- v4.1.1
- v4.1.0
- v4.0.6
- v4.0.5
- v4.0.4
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- v3.0.2
- v3.0.1
- v3.0.0
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.1
- v2.0.0
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.1
- v1.0.2
- v1.0.1
- v1.0.0
- v0.6.0
- v0.5.2
- v0.5.1
- v0.5.0
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.6
- v0.3.5
- v0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.6
- v0.2.5
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1
- v0.2.0
- 0.1.0
- dev-mailgun-sender-fixes
- dev-test-monolog-version
- dev-release/4.1.0
- dev-feature/225-configurable-rollbar-threshold
- dev-feature/202-internationalizable-validation-messages
- dev-feature/125-findby-table-name
- dev-release/1.4.2
This package is not auto-updated.
Last update: 2020-01-18 10:04:57 UTC
README
概述
Synapse Base 是一个用于在 Silex 微型框架中构建 PHP 应用的引导库。它旨在为提供和消费 JSON 的 REST API 提供一个有见地的、安全的起点。
此库使用以下工具和库为您的 REST API 提供一个有见地的、安全的起点
- Silex
- bshaffer 的 OAuth2 服务器
- Zend DB
- chrisboulton 的 php-resque
- Mandrill PHP SDK 用于电子邮件
- Symfony 的控制台、安全性和验证器组件
- Monolog 用于日志记录
- 以及许多其他库
设置您的项目
快速入门
对于新项目,只需将 API 模板 克隆为起点,并执行 composer install
。
对库的期望
架构期望
- 用于应用数据的 MySQL 服务器
- 用于作业队列的 Redis 服务器
项目代码库期望
(如果您仅使用 API 模板,则不需要了解大多数内容。)
- 一些命名常量应 存在。
- 应该设置
APP_ENV
环境变量。(设置为development
、production
或staging
。) - 在
[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安全文档以获取更多详细信息。
注意
- 当在防火墙中指定监听器时(
'anonymous' => true
,'oauth-optional' => true
),运行的代码在监听器中。(这些是在OAuth2\SecurityServiceProvider中添加的。) - 有一个通配符防火墙,它将所有端点限制为受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测试用例,以简化测试过程。