owenmelbz/illumipress

IllumiPress 是一个用于 illuminate 支持的简单包装器,包括 HTTP 响应、请求、验证、zttp、缓存、加密、Blade 模板和 Whoops 错误处理器,适用于 WordPress

0.0.17 2019-02-05 09:40 UTC

This package is auto-updated.

Last update: 2024-09-06 10:10:05 UTC


README

IllumiPress logo

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 使用集合
  • 两者 dumpdd
  • 数组助手,如 data_getarray_wraparray_dot
  • 字符串助手,例如 ends_withstarts_withstr_containsstr_random
  • 逻辑助手,如 optionaltapthrow_if
  • 通过 kitetail\zttphttp() 助手访问 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']) 等操作

许可证

这是一个完全免费和开源的项目,您可以随意用于任何您喜欢的用途。如果您希望修改和重新分发它,请务必给原始存储库一些认可。