qybercom / quark
Quark 是一个多用途的 PHP 框架,专为复杂项目设计
Requires
- php: >=5.4
This package is auto-updated.
Last update: 2024-10-01 09:27:14 UTC
README
Quark 是一个 PHP SaaS 框架,专为复杂项目设计。
需求
- PHP 版本 5.4 或更高
- NginX + php-fpm 或 Apache + mod-rewrite + mod-php
附加
一些部分(尤其是数据提供者)可能需要额外的 PHP 扩展。核心扩展列表可以在 wiki 中找到。
开始吧!
让我们创建一个简单的 HelloWorld。
首先,我们需要了解最佳的项目文件结构 (D - 目录,F - 文件)
[D] Services
[D] Models
[D] ViewModels
[D] Views
[D] storage
[D] static
[D] runtime
[F] .gitignore
[F] .htaccess
[F] index.php
根据项目类型,可能不存在 ViewModels、Views 和 static 或 storage 等文件夹。Quark 仓库中可以找到 .htaccess。当然,如果您使用 NginX+php-fpm,您需要将重写规则放入您的虚拟主机配置中。在 .gitignore 中可以包含 runtime 和 index.php。
现在,让我们看看 index.php。所需的最小集合是
<?php include '/path/to/quark/Quark.php'; use Quark\Quark; use Quark\QuarkConfig; $config = new QuarkConfig(); Quark::Run($config);
在此文件中,您可以配置所有 DataProviders、AuthProviders、Extensions 和应用程序设置。
让我们创建第一个服务。命名约定要求所有服务都必须符合以下规则
[any valid string with first letter in uppercase]Service
示例:IndexService、CreateService、MySuperService 等。
服务的文件名必须采用服务类名 + .php 的形式。例如:IndexService.php、CreateService.php、MySuperService.php 等。
服务是处理的原子点,因此它们只包含 HTTP 方法钩子和身份验证设置。
一个简单的服务,它响应 / 网页路径上的 GET 请求,可以看起来像这样
<?php namespace Services; use Quark\IQuarkGetService; use Quark\QuarkDTO; use Quark\QuarkSession; /** * Class IndexService * * @package Services */ class IndexService implements IQuarkGetService { /** * @param QuarkDTO $request * @param QuarkSession $session * * @return mixed */ public function Get (QuarkDTO $request, QuarkSession $session) { echo 'Hello World!'; } }
将此代码放在 IndexService.php 文件中,并将其放入 Services 目录的根目录。您第一个服务已经完成 =)
如您所见,我们实现了 IQuarkGetService,这表明该服务具有 GET 请求的钩子。在 Quark 核心中还定义了 IQuarkPostService。出于安全原因,不建议在不需要支持 WebDAV 的应用程序中使用其他方法服务。
对于 WebDAV 应用程序,在
Extensions\Quark\WebDAV中有许多接口。
接下来是什么?
如前所述,Quark 是为使用在复杂网络应用程序中设计的,这些应用程序可以使用 REST API。当然,任何 API 应用都需要某种通信数据协议(例如 JSON)。因此,在主包中定义了 IQuarkIOProcessor 和一些通用处理器(例如 QuarkJSONIOProcessor、QuarkXMLIOProcessor 等)。
让我们创建一个名为 HelloService 的服务,该服务将返回 JSON 字符串 {"hello":"world"}
<?php namespace Services; use Quark\IQuarkGetService; use Quark\IQuarkServiceWithCustomProcessor; use Quark\QuarkDTO; use Quark\QuarkSession; /** * Class HelloService * * @package Services */ class HelloService implements IQuarkGetService, IQuarkServiceWithCustomProcessor { /** * @return IQuarkIOProcessor */ public function Processor () { return new QuarkJSONIOProcessor(); } /** * @param QuarkDTO $request * @param QuarkSession $session * * @return mixed */ public function Get (QuarkDTO $request, QuarkSession $session) { return array( 'hello' => 'world' ); } }
如您所见,我们只为该服务定义了数据处理器并返回了需要处理的数据。很简单 =)
Quark 允许为请求和响应定义不同的处理器。所有需要做的就是实现相应的接口。
这只是开始!
有关 Quark 各部分的更多信息,请参阅 Wiki。
基于 Quark 的开源博客平台 https://github.com/Qybercom/Thinkscape