paulm17 / parser-2
该包已被弃用且不再维护。未建议替代包。
简单的PHP解析器实用库,用于API开发
dev-master / 3.x-dev
2020-03-21 10:51 UTC
Requires
- php: >=5.3.0
- symfony/yaml: ~2.0|~3.0|~4.0|~5.0
Requires (Dev)
- illuminate/support: ~5.0|~6.0|~7.0
- mockery/mockery: 0.9.3
- phpunit/phpunit: 4.*|5.*
- scrutinizer/ocular: ^1.1
This package is auto-updated.
Last update: 2020-06-17 10:24:13 UTC
README
简单的PHP解析库,用于API开发,可以将POST请求体解析成PHP数组。
还可以查看Responder库以处理输出。
安装
首先通过Composer安装此包。在终端中
composer require nathanmac/parser
Laravel/Lumen用户
Laravel/Lumen版本 | 支持的库版本 |
---|---|
Laravel/Lumen 5+ | > 3.* |
Laravel 4 | 2.* |
Laravel用户(添加服务提供者)
如果您是Laravel用户,则可以使用服务提供者来自动准备绑定等。
在app/config/app.php
中包含服务提供者。
'providers' => [ ..., Nathanmac\Utilities\Parser\ParserServiceProvider::class ];
为方便起见,在文件底部添加一个外观别名
'aliases' => [ ..., 'Parser' => Nathanmac\Utilities\Parser\Facades\Parser::class, ];
Lumen用户(添加服务提供者)
如果您是Lumen用户,则可以使用服务提供者来自动准备绑定等。
// bootstrap/app.php $app->register('Nathanmac\Utilities\Parser\ParserServiceProvider');
Lumen用户还可以添加外观别名。
// bootstrap/app.php class_alias('Nathanmac\Utilities\Parser\Facades\Parser', 'Parser');
使用外观
public function index() { Parser::payload('application/json'); Parser::json($payload); // JSON > Array Parser::xml($payload); // XML > Array Parser::yaml($payload); // YAML > Array Parser::querystr($payload); // Query String > Array Parser::serialize($payload); // Serialized Object > Array Parser::bson($payload); // BSON > Array Parser::msgpack($payload); // MSGPack > Array Parser::all(); // Return all values Parser::has('key'); // Does a key exist, with value. Parser::get('key', 'default value'); // Get value by key, set an optional default. Parser::only('id', 'name', 'email'); // Only return value from the selected keys. Parser::except('password'); // Don't return values from the selected keys. Parser::mask($mask); // Return masked values (see Mask Function, below). }
以下所有示例都假设您没有使用Laravel(或Lumen),因此没有访问外观的权限。与任何其他外观一样,您只需使用
$parser = new Parser(); $parser->{$method}($payload);
而是使用
Parser::{$method}($payload);
使用
解析函数
$parser->json($payload); // JSON > Array $parser->xml($payload); // XML > Array $parser->yaml($payload); // YAML > Array $parser->querystr($payload); // Query String > Array $parser->serialize($payload); // Serialized Object > Array $parser->bson($payload); // BSON > Array $parser->msgpack($payload); // MSGPack > Array
解析输入/负载(PUT/POST)
$parser = new Parser(); $parser->payload(); // Auto Detect Type - 'Content Type' HTTP Header $parser->payload('application/json'); // Specifiy the content type
辅助函数
$parser = new Parser(); $parser->all(); // Return all values $parser->has('key'); // Does a key exist, with value. $parser->get('key', 'default value'); // Get value by key, set an optional default. $parser->only('id', 'name', 'email'); // Only return value from the selected keys. $parser->except('password'); // Don't return values from the selected keys. $parser->mask($mask); // Return masked values (see Mask Function, below).
掩码函数
掩码函数使用配置掩码处理负载数据,从而只返回数据的一个子集。它的工作方式与only
方法相同,但增加了允许您以数组的形式指定掩码的优点,这意味着您可以根据系统或用户定义的条件动态生成掩码。
演示
掩码
定义掩码,掩码由基本数组结构组成,对于这个特定的例子,我们有一些返回数据的规则,包括:-帖子的标题-所有评论的内容。
$mask = [ 'post' => [ 'title' => '*', 'comments' => [ 'body' => '*' ] ] ];
示例负载
{ "post": { "title": "Hello World", "author": "John Smith", "comments": [ {"body": "This is a comment", "date": "2015-02-20"}, {"body": "This is another comment", "date": "2015-05-09"} ] } }
应用掩码
$parser = new Parser(); $output = $parser->mask($mask);
输出
这是将掩码应用于上面提供的样本有效负载后生成的输出。
$output = [ 'post' => [ 'title' => 'Hello World', 'comments' => [ ['body' => 'This is a comment'], ['body' => 'This is another comment'] ] ] ];
通配符/特殊键(*, %, :first, :last, :index[0], :item[0])
$parser = new Parser(); $parser->has('message.*'); // Does a key exist, with value. (Wildcard key returns first item found) $parser->get('message.*'); // Get value by key. (Wildcard key returns first item found) $parser->has('message.:first'); // Does a key exist, with value. (:first key returns first item found) $parser->get('message.:first'); // Get value by key. (:first key returns first item found) $parser->has('message.:last'); // Does a key exist, with value. (:last key returns last item found) $parser->get('message.:last'); // Get value by key. (:last key returns last item found) $parser->has('message.:index[0]'); // Does a key exist, with value. (:index[0] key returns item at index 0) $parser->get('message.:index[0]'); // Get value by key. (:index[0] key returns item at index 0) $parser->has('message.:item[0]'); // Does a key exist, with value. (:item[0] key returns item at index 0) $parser->get('message.:item[0]'); // Get value by key. (:item[0] key returns item at index 0)
解析 JSON
$parser = new Parser(); $parsed = $parser->json(' { "message": { "to": "Jack Smith", "from": "Jane Doe", "subject": "Hello World", "body": "Hello, whats going on..." } }');
解析 XML
$parser = new Parser(); $parsed = $parser->xml(' <?xml version="1.0" encoding="UTF-8"?> <xml xmlns:ns="http://example.com/xmlns"> <message status="sent"> <ns:meta hint="created">Created 5 minutes ago</ns:meta> <to>Jack Smith</to> <from>Jane Doe</from> <subject>Hello World</subject> <body>Hello, whats going on...</body> </message> </xml>');
解析查询字符串
$parser = new Parser(); $parsed = $parser->querystr('to=Jack Smith&from=Jane Doe&subject=Hello World&body=Hello, whats going on...');
解析序列化对象
$parser = new Parser(); $parsed = $parser->serialize('a:1:{s:7:"message";a:4:{s:2:"to";s:10:"Jack Smith";s:4:"from";s:8:"Jane Doe";s:7:"subject";s:11:"Hello World";s:4:"body";s:24:"Hello, whats going on...";}}');
解析 YAML
$parser = new Parser(); $parsed = $parser->yaml(' --- message: to: "Jack Smith" from: "Jane Doe" subject: "Hello World" body: "Hello, whats going on..." ');
解析 BSON
$parser = new Parser(); $parsed = $parser->bson('BSON DATA HERE');
解析 MSGPack
$parser = new Parser(); $parsed = $parser->msgpack('MSGPACK DATA HERE');
自定义解析器/格式化器
您可以通过实现 FormatInterface 来创建自己的自定义解析器/格式化器,以下示例演示了自定义解析器/格式化器的使用。
use Nathanmac\Utilities\Parser\Formats\FormatInterface; /** * Custom Formatter */ class CustomFormatter implements FormatInterface { /** * Parse Payload Data * * @param string $payload * * @return array * * @throws ParserException */ public function parse($payload) { $payload; // Raw payload data $output = // Process raw payload data to array return $output; // return array parsed data } }
使用 CustomFormatter
use Acme\Formatters\CustomFormatter; $parser = new Parser(); $parsed = $parser->parse('RAW PAYLOAD DATA', new CustomFormatter());
自动检测 CustomFormatter
use Acme\Formatters\CustomFormatter; $parser = new Parser(); $parser->registerFormat('application/x-custom-format', 'Acme\Formatters\CustomFormatter'); $parser->payload('application/x-custom-format');
测试
要测试库本身,请运行测试
composer test
贡献
请参阅 CONTRIBUTING 获取详细信息。
鸣谢
许可
MIT 许可证(MIT)。请参阅 许可文件 获取更多信息。
附录
支持的媒体类型
XML
---
application/xml > XML
text/xml > XML
JSON
----
application/json > JSON
application/x-javascript > JSON
text/javascript > JSON
text/x-javascript > JSON
text/x-json > JSON
YAML
----
text/yaml > YAML
text/x-yaml > YAML
application/yaml > YAML
application/x-yaml > YAML
BSON
----
application/bson > BSON
MSGPack
-------
application/msgpack > MSGPack
application/x-msgpack > MSGPack
MISC
----
application/vnd.php.serialized > Serialized Object
application/x-www-form-urlencoded' > Query String