phly / phly-paste
ZF2 实现的代码片段粘贴板模块
Requires
- php: >=5.3.3
- doctrine/common: >=2.1
- easybook/geshi: dev-master
- nick4fake/htmlpurifier: dev-master
- zendframework/zend-authentication: 2.*
- zendframework/zend-captcha: 2.*
- zendframework/zend-form: 2.*
- zendframework/zend-mvc: 2.*
- zendframework/zend-stdlib: 2.*
- zendframework/zend-view: 2.*
Suggests
- EdpMarkdown: Install Markdown to allow markdown pastes: git clone --recursive git://github.com/EvanDotPro/EdpMarkdown.git vendor/EdpMarkdown
- phly/phly-mongo: Install phly/phly-mongo if you wish to use the Mongo adapters
- zendframework/zend-db: Install Zend\Db if you plan to use the TableGatewayPasteService
- zendframework/zendservice-recaptcha: Install ReCaptcha service if you plan to use ReCaptcha
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
实现,用于验证令牌。