owenmelbz / illumipress
IllumiPress 是一个用于 illuminate 支持的简单包装器,包括 HTTP 响应、请求、验证、zttp、缓存、加密、Blade 模板和 Whoops 错误处理器,适用于 WordPress
Requires
- filp/whoops: ^2.1
- illuminate/cache: 5.*
- illuminate/encryption: 5.*
- illuminate/http: 5.*
- illuminate/validation: 5.*
- illuminate/view: 5.*
- kitetail/zttp: ^0.3.0
Requires (Dev)
- phpunit/phpunit: ^7.0
README
IllumiPress
IllumiPress 是 Laravel 5 illuminate 包的一些简单包装器,允许用户将 Laravel 的一些愉快功能集成到 WordPress 中。
我们目前将 WordPress 与 Laravel Blade、HTTP 请求、响应、验证器和支持(例如集合、dd、字符串助手等)、ZTTP、缓存(redis、memcached、文件)和加密集成
安装
最简单的方法是通过 composer,例如在项目根目录下执行 composer require owenmelbz/illumipress
。
即使你的项目没有使用 composer,你也可以使用上述命令,但必须手动在项目中包含 vendor/autoload.php
,对于 WordPress,建议使用 functions.php
。
功能
由于 illuminate 包需要 illuminate/support 包,因此你还可以访问一系列魔法,如
- 通过
collect
使用集合 - 两者
dump
和dd
- 数组助手,如
data_get
、array_wrap
、array_dot
等 - 字符串助手,例如
ends_with
、starts_with
、str_contains
、str_random
- 逻辑助手,如
optional
、tap
、throw_if
- 通过
kitetail\zttp
和http()
助手访问 Guzzle - 使用
filename.blade.php
进行 Laravel Blade 模板渲染,允许view('component.sidebar')
等
你可以看到包含组件的完整列表 https://github.com/illuminate/support
用法
该包有一个子类,它扩展了核心 illuminate 类以添加一些额外的辅助函数。
请求类
目前这没有任何自定义功能,你应该能够使用提供的文档 https://laravel.net.cn/docs/5.6/requests - 你可以访问全局助手 request()
以获取请求对象的新实例,因此你可以做诸如 request()->get('my_posted_data', 'default value')
等事情。
响应类
Laravel 和此实现之间的主要区别在于,通常你必须手动使用 Symfony 的 "send()" 方法来完成请求,例如。
return response(['hello' => 'world'])->send();
然而,在顶部有自定义助手,提供一致的 Ajax 风格响应,ajax()
、success()
、error()
// alias of ->success()
// Sends a JSON response formatted into a JSONSchema'esque structure
return response([
'hello' => 'world'
])->ajax();
// Returns 200 header
{
"data": {"hello": "world"},
"meta": {"success": true}
}
// You can also send a JSON response with error headers
return response('Sorry something went wrong')->error(422);
// Returns a 422 error
{
"data": "Sorry something went wrong",
"meta": {"success": false}
}
你还可以向响应添加自定义元数据,这对于“下一页”和“上一页”数据等很有用。
return response('My response')->addMeta(['key' => 'value'])->send();
你可以使用 setMeta
方法完全覆盖元数据。
验证类
这提供了验证类上的 2 个额外方法,首先是可以使用 $validator->formattedErrors()
返回格式化的错误列表,以及使用之前提到的自动格式化使用 $validator->response()
返回 Ajax 结果的能力。
你可以在那里使用完整的验证类(https://laravel.net.cn/docs/5.6/validation)进行使用
$validator = validator(request()->all(), [
'name' => 'required',
'email' => 'required|email'
]);
if ($validator->fails()) {
return $validator->response();
}
// Outputs
{
"data": [
{
"param": "name",
"messages": [
"the name field is required",
]
}
],
"meta": {
"success": false
}
}
默认情况下,我们仅包括默认的 Laravel i18n 错误消息,你可以遵循 Laravel 文档来传递自定义消息 https://laravel.net.cn/docs/5.6/validation#custom-error-messages
如果您需要使用翻译,您可以加载自定义消息文件,例如
$validator = validator($data, $rules);
$validator->setLanguageFile(__DIR__ . '/i18n/french.php');
Laravel Blade
Blade 也已被包含,以便提供更流畅的模板渲染语法。
默认情况下它是禁用的 - 然而,您可以使用 turn_blade_on()
来启用它,使用 turn_blade_off()
来关闭它
如果您的文件命名为 template.blade.php
,Blade 可以直接渲染模板,然而,如果您启用了 Blade 并有正常的 template.php
文件,它将在 wp-content/uploads/.cache/
内创建一个动态副本,每次您更改文件时都会更新。
此集成基于 https://github.com/tormjens/wp-blade,这意味着您可以得到一些起始指令,例如
@post
<h1>{{ the_title() }}</h1>
<p>@field('page_intro')</p>
@has('extra_intro')
<p>@field('extra_intro')</p>
@endhas
<ul>
@repeater('services')
<li>@subfield('service_name')</li>
@endrepeater
</ul>
<div class="related">
@wpquery(['author_id' => 21])
{{ the_title() }}
@endwpquery
</div>
@endpost
您可以使用 view('components.sidebar')
辅助函数返回已渲染的视图
缓存
还包括 illuminate\cache
包,它可以通过全局 cache()
辅助函数访问,因此您可以执行诸如 cache()->put('user_10', 'Taylor')
等操作。
目前您可以使用文件、memcached 和 redis 驱动进行缓存,并有一些基本配置。配置项由以下常量公开。
- Redis --
REDIS_CONNECTION
(默认 =default
) --REDIS_PREFIX
(默认 =illumipress
) --REDIS_HOST
(默认 =127.0.0.1
) --REDIS_PORT
(默认 =6379
) - 文件 --
ILLUMINATE_CACHE
(默认 =wp-uploads/.cache
) - Memcached --
MEMCACHED_PREFIX
(默认 =illumipress
) --MEMCACHED_HOST
(默认 =127.0.0.1
) --MEMCACHED_PORT
(默认 =11211
)
示例用法可能是
define('ILLUMINATE_CACHE', './cache');
$tweets = cache()->remember('recent_tweets', $cacheLifeTimeInMinutes = 20, function () {
return $tweets = http('https://twitter.com/illumipress.json');
));
加密
还包括 illuminate/encrypter
来处理某些敏感数据,您可以通过 encryption
全局辅助函数使用它。
默认情况下,它将寻找一个名为 ILLUMINATE_ENCRYPTION_KEY
的常量,它应该是一个 16 位的密钥,将用于加密数据。当然,您可能希望为每个用户创建一个独特的密钥,以防止其他用户解密其他用户的数据。
您可以将自己的加密密钥传递给辅助函数,例如
$enc = encryption($user->private_key);
$encryptedData = $enc->encrypt('My secret');
$decryptedData = $enc->decrypt($encryptedData);
echo $decryptedData; // My Secret
Whoops
默认情况下(抱歉),我们启用了 filp/whoops
错误处理器以启用更友好的错误。
您可以通过 turn_whoops_off()
和 turn_whoops_on()
来关闭和打开它
然而,当您的 WordPress 配置将 WP_DEBUG_DISPLAY
定义为 false
时,Whoops 将禁用自己 - 不论您输入什么。
HTTP 客户端 / Guzzle / cURL / zttp
我们还包含 kitetail/zttp
库,通过 http()
辅助函数提供简单的 curl 访问,有关详细信息,我们建议查看 zttp GitHub 文档
$stringResponse = http('https:/www.google.com');
对于简单的 curl GET 请求,您可以使用上述方法,对于更复杂的请求,您可以使用更完整的语法,它返回一个 ZttpResponse
实例
$response = http()->post('https://www.google.com/', ['q' => 'my query']);
if ($response->isOkay()) {
echo $response->body();
echo $response->json();
echo etc...
}
由于 zttp
在底层使用 Guzzle,这意味着您还可以访问完整的 Guzzle 套件,并执行诸如 (new Guzzle\Client)->setBaseUri('https://www.google.com/')->post('search', ['q' => 'query'])
等操作
许可证
这是一个完全免费和开源的项目,您可以随意用于任何您喜欢的用途。如果您希望修改和重新分发它,请务必给原始存储库一些认可。