phly/phly-paste

该软件包最新版本(1.1.0)没有提供许可证信息。

ZF2 实现的代码片段粘贴板模块

1.1.0 2012-12-13 12:24 UTC

This package is auto-updated.

Last update: 2024-09-11 14:26:44 UTC


README

这是一个实现 ZF2 代码片段粘贴板的模块。

功能

  • 常规代码片段粘贴板功能:按语言进行语法高亮、短网址、将粘贴标记为“私有”(这意味着它们不会显示在列表中)。

  • 可以指定“markdown”作为语言;这将通过 markdown 解析器传递粘贴以生成标记。

  • 可以指定代码的“部分”,因此可以在同一个粘贴中粘贴多个“文件”。任何以“##”开头的行都表示一个部分。该部分将包含“##”之后的所有文本作为标题

    test.txt

    这是第一个部分。

    test2.txt

    这是第二个部分。

    此外,如果您在括号中放置语言名称,则该语言将用于该部分的语法高亮。

    test.js [javascript]

    { "text": "highlighted as javascript" }

    test.php [php]

    echo "This is highlighted as PHP";

    熟悉 pastie.org 的开发者会发现上述语法很熟悉。

  • API 提供列出粘贴、检索单个粘贴详细信息以及提交粘贴的功能。API 的粘贴检索部分不需要授权,但提交粘贴需要授权令牌。(有关详细信息,请参阅下文标题为“API”的部分。

安装

通过 composer 安装

{
    "minimum-stability": "dev",
    "repositories": [
        {
            "type": "composer",
            "url": "http://packages.zendframework.com/"
        }
    ],
    "require": {
        "phly/phly-paste": "dev-master"
    }
}

要允许 Markdown 作为一种标记类型,您还需要安装 EdpMarkdown。可以使用以下方式完成此操作

cd vendor
git clone --recursive git://github.com/EvanDotPro/EdpMarkdown.git

接下来,将 EdpMarkdown 添加到您的 config/application.config.php 文件中的模块数组中。

Mongo 使用

要使用 Mongo 作为后端,您需要做几件事情。

首先,将 "phly/phly-mongo" 添加到 composer.json 的需求中

{
    "minimum-stability": "dev"
    "require": {
        "phly/phly-paste": "dev-master",
        "phly/phly-mongo": "dev-master"
    }
}

运行 php composer.phar update 后,您还需要配置您的应用程序以使用 Mongo。一种简单的方法是在您的网站的主要模块中(通常为“Application”)

namespace Application;

use PhlyMongo\MongoDbFactory;
use PhlyMongo\MongoCollectionFactory;
use PhlyPaste\MongoPasteService;

class Module
{
    public function getServiceConfig()
    {
        return array('factories' => array(
           'Paste\Mongo'           => 'PhlyMongo\MongoConnectionFactory',
           'Paste\MongoDb'         => new MongoDbFactory('site', 'Paste\Mongo'),
           'Paste\MongoCollection' => new MongoCollectionFactory('pastes', 'Paste\MongoDb'),
           'PhlyPaste\MongoService' => function ($services) {
               $collection = $services->get('Paste\MongoCollection');
               return new MongoPasteService($collection);
           },
        ));
    }
}

或者,您可以直接配置一个返回 MongoCollection 的服务,并将其传递给 MongoPasteService 构造函数。

请确保在“hash”和“timestamp”字段上创建索引

// Create a unique index on the "hash" field
$collection->ensureIndex(array('hash' => 1), array('unique' => true));

// Create an index on "timestamp" descending
$collection->ensureIndex(array('timestamp' => -1));

如果需要,您可以在您的工厂中执行上述操作。

Zend\Db\TableGateway 使用

目前,仅支持 SQLite。要从应用程序根目录设置数据库,请执行以下操作

sqlite data/paste.db < vendor/phly/phly-paste/config/schema.sqlite.sql

请确保 data/paste.db 文件可由您的 web 服务器写入。

然后在您的 config/autoload/global.php 文件中创建以下配置(或该目录中的其他可自动加载的配置文件)

return array(
    'db' => array(
        'driver' => 'Pdo',
        'dsn'    => 'sqlite:' . getcwd() . '/data/paste.db',
    ),
    'service_manager' => array(
        'aliases' => array(
            'PhlyPaste\PasteService' => 'PhlyPaste\TableGatewayService',
        ),
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);

一旦设置好了,您应该能够创建和列出粘贴。

CAPTCHA 设置

默认情况下,使用的是“愚蠢”的 CAPTCHA 适配器。您可以通过在“phly_paste”键的“captcha”子键下提供全局或本地配置来设置替代适配器。配置与 Zend\Captcha\Factory 保持一致

return array(
    'phly_paste' => array(
        'captcha' => array(
            'class' => 'CaptchaClassName',
            'options' => array(/* array of adapter-specific options */),
        ),
    ),
);

您可以禁用已认证用户的 CAPTCHA。为此,您需要定义一个名为 PhlyPaste\AuthService 的别名,该别名指向返回 Zend\Authentication\AuthenticationService 实例的服务。一旦启用,CAPTCHA 将不再为当前已认证用户显示。

API

此模块也启用了API。默认情况下,它指向由路径 '/paste/api/paste' 描述的路由。该API仅支持JSON格式,并期望“Accept”头与媒体类型“application/hal+json”匹配(它也允许“application/json”,但始终返回“application/hal+json”)。

以下操作可用

GET /paste/api/paste[?page=X]

检索粘贴列表的单页。负载如下

HTTP/1.0 200 Ok
Content-Type: application/json

{
    "_links": {
        "canonical": {"rel": "canonical", "href": "http://pages.local/paste"},
        "self": {"rel": "self", "href": "http://pages.local/paste/api/paste"},
        "first": {"rel": "first", "href": "http://pages.local/paste/api/paste"},
        "last": {"rel": "last", "href": "http://pages.local/paste/api/paste?page=X"},
        "next": {"rel": "next", "href": "http://pages.local/paste/api/paste?page=2"}
    },
    "items": [
        [
            {"rel": "canonical", "href": "http://pages.local/paste/XYZ"},
            {"rel": "item", "href": "http://pages.local/paste/api/paste/XYZ"}
        ],
        /* ... */
    ]
}

GET /paste/api/paste/XYZ12ABC

获取单个粘贴的信息。负载如下

HTTP/1.0 200 Ok
Content-Type: application/json

{
    "_links": {
        "canonical": {"rel": "canonical", "href": "http://pages.local/paste/XYZ12ABC"},
        "self": {"rel": "self", "href": "http://pages.local/paste/api/paste/XYZ12ABC"},
        "up": {"rel": "up", "href": "http://pages.local/paste/api/paste"}
    },
    "title": "...",
    "language": "...",
    "timestamp": "...",
}

POST /paste/api/paste

期望JSON体,如下

Accept: application/json
Content-Type: application/json
X-PhlyPaste-Token: yourtoken

{
    "language": "txt",
    "private": "false",
    "content": "This is the paste content..."
}

您将获得以下响应负载

HTTP/1.0 201 Created
Location: http://paste.local/paste/XYZ12ABC
Content-Type: application/json

{
    "_links": {
        "canonical": {"rel": "canonical", "href": "http://pages.local/paste/XYZ12ABC"},
        "self": {"rel": "self", "href": "http://pages.local/paste/api/paste/XYZ12ABC"}
    }
}

提交粘贴的授权令牌

如您在前面的示例中注意到的,POST操作需要一个“X-PhlyPaste-Token”头。令牌将通过PhlyPaste\TokenService服务进行验证,该服务仅是PhlyPaste\Model\TokenServiceInterface的实现。默认情况下,提供了一个实现,PhlyPaste\Model\ArrayTokenService。此实现期望配置中包含令牌

return array(
    'phly_paste' => array(
        'tokens' => array(
            'yourtoken',
        ),
    ),
);

如果您使用此方法,请确保在存储在您的存储库之外的.local.php文件中定义令牌。

或者,您可以创建自己的TokenServiceInterface实现,用于验证令牌。