adrotec/breeze.server.php

Breeze JS 支持 Symfony 2 或任何 PHP 5.3+ 应用程序

1.1.0 2017-05-24 14:12 UTC

This package is not auto-updated.

Last update: 2024-09-21 12:39:03 UTC


README

该项目不再维护。我们将不会接受拉取请求,解决问题,也不会发布未来的版本。

breeze.server.php

官方 BreezeJS 文档中展示

这是一个 PHP 库,它通过使用 Doctrine 来简化构建与 Breeze JS 兼容的后端

特性

  • 框架无关
  • 从 Doctrine 映射生成 Breeze 元数据
  • 使用连接加载来扩展相关实体的图
  • 使用 JMSSerializer 将查询结果序列化为 JSON
  • 使用 Doctrine 单元工作流处理 Breeze 有效载荷的保存
  • 支持使用 Symfony 验证组件 进行 Breeze 验证
  • 支持 Breeze 继承和多态查询。服务器和客户端都支持 单表继承类表继承。但是,您可以在服务器中使用 映射超类 而无需担忧。

Doctrine

一个文档齐全、功能丰富且流行的 PHP 对象关系映射器,支持多种数据库系统

为什么使用 Doctrine?(来自 doctrine 网站

  • 自 2006 年以来,代码库非常稳定,质量高。
  • 非常灵活和强大的对象映射和查询功能。
  • 支持所有用例的高级和低级数据库编程。
  • 拥有庞大的社区,并与许多不同的框架(Symfony、Zend Framework、CodeIgniter、FLOW3、Lithium 等)集成

目前,此库仅支持 Doctrine ORM。未来的版本应该也支持 Doctrine MongoDB ODM

一些 Doctrine 类型 已转换为 Breeze 数据类型

内置的 Doctrine 类型及其 breeze 对应类型

  • string - String - SQL VARCHAR 转换为 PHP 字符串。
  • integer - Int32 - SQL INT 转换为 PHP 整数。
  • smallint - Int32 - SMALLINT 转换为 PHP 整数。
  • bigint - Int32 - BIGINT 转换为 PHP 字符串。
  • boolean - Boolean - SQL boolean 转换为 PHP 布尔值。
  • decimal - Decimal - SQL DECIMAL 转换为 PHP 双精度浮点数。
  • date - DateTime - SQL DATETIME 转换为 PHP DateTime 对象。
  • time - DateTime - SQL TIME 转换为 PHP DateTime 对象。
  • datetime - DateTime - SQL DATETIME/TIMESTAMP 转换为 PHP DateTime 对象。
  • float - Double - SQL 浮点数(双精度)到 PHP 双精度浮点数。重要:仅适用于使用小数点作为分隔符的区域设置。
  • 其他数据类型将回退到 String

JMS 序列化器

一个强大的 PHP 序列化库。提供了对序列化结果的更多控制。例如:如果您想从返回结果中排除一个属性,您可以使用 @Exclude 注解。阅读文档了解更多信息。

Symfony 验证组件

(可选,如果您想支持验证)一个带有 Doctrine 默认支持的强大 PHP 验证服务。

请注意,使用 Symfony 组件并不意味着您必须使用完整的 symfony 框架,因为它们是解耦的并且是独立组件的组件

一些验证约束被转换为等效的breeze 验证器

内置验证约束及其 Breeze 等效验证器

示例/演示

安装

该库使用 composer,PHP 的包管理器。

将这些行添加到您的 composer.json 文件中,并运行 composer update

    "require": {
        "adrotec/breeze.server.php": "dev-master"
    }

请注意,由于该库依赖于 ConstraintViolation::getConstraint() 方法,而该方法在旧版本中尚不可用,因此 symfony/validator - 2.6+"adrotec/breeze.server.php" 所必需的。

使用

该库提供了一个基本的框架,可以轻松引导 API。您可以使用 ApplicationStandaloneApplication 类。

使用 Application

/* @var $entityManager instanceof \Doctrine\ORM\EntityManager */
/* @var $serializer instanceof \JMS\Serializer\SerializerInterface */
/* @var $validator instanceof \Symfony\Component\Validator\Validator\ValidatorInterface */

$app = new Adrotec\BreezeJs\Framework\Application(
  $entityManager,
  $serializer,
  $validator
);

$app->addResources(array(
    'Employees' => 'EmpDirectory\Model\Employee',
    'Departments' => 'EmpDirectory\Model\Department',
    'Jobs' => 'EmpDirectory\Model\Job',
));

/* @var $request instanceof \Symfony\Component\HttpFoundation\Request */

$response = $app->handle($request);

使用 StandaloneApplication

$loader = require 'vendor/autoload.php';

$app = new Adrotec\BreezeJs\Framework\StandaloneApplication();

$app->setConnection(array(
    'driver' => 'pdo_mysql',
    'host' => 'localhost',
    'dbname' => 'employees',
    'user' => 'root',
    'password' => ''
));

// configuring doctrine, serializer and validator
// using xml mappings
$app->addMapping(array(
    'namespace' => 'EmpDirectory\Model',
    'type' => 'xml',
    'extension' => '.orm.xml', // default ".dcm.xml"
    'doctrine' => __DIR__ . '/src/EmpDirectory/config/doctrine', // doctrine directory
    'serializer' => __DIR__ . '/src/EmpDirectory/config/serializer', // [optional] serializer metadata directory
    'validation' => __DIR__ . '/src/EmpDirectory/config/validation.xml', // [optional] validation file
));

// limiting the api to certain classes
$app->addResources(array(
    // Resource name => Class name
    'Employees' => 'EmpDirectory\Model\Employee',
    'Jobs' => 'EmpDirectory\Model\Job',
    'Departments' => 'EmpDirectory\Model\Department',
));

$app->build();

$app->run();

与 Symfony 2

为此有一个 bundle