qybercom / quark

Quark 是一个多用途的 PHP 框架,专为复杂项目设计

dev-master 2024-10-01 09:27 UTC

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

根据项目类型,可能不存在 ViewModelsViewsstaticstorage 等文件夹。Quark 仓库中可以找到 .htaccess。当然,如果您使用 NginX+php-fpm,您需要将重写规则放入您的虚拟主机配置中。在 .gitignore 中可以包含 runtimeindex.php

现在,让我们看看 index.php。所需的最小集合是

<?php
include '/path/to/quark/Quark.php';

use Quark\Quark;
use Quark\QuarkConfig;

$config = new QuarkConfig();

Quark::Run($config);

在此文件中,您可以配置所有 DataProvidersAuthProvidersExtensions 和应用程序设置。

让我们创建第一个服务。命名约定要求所有服务都必须符合以下规则

[any valid string with first letter in uppercase]Service

示例:IndexServiceCreateServiceMySuperService 等。

服务的文件名必须采用服务类名 + .php 的形式。例如:IndexService.phpCreateService.phpMySuperService.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 和一些通用处理器(例如 QuarkJSONIOProcessorQuarkXMLIOProcessor 等)。

让我们创建一个名为 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