定制 owenmelbz/illumipress 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

owenmelbz/illumipress

Composer 安装命令:

composer require owenmelbz/illumipress

包简介

Simple wrapper for the illuminate support, http response, request, validation, zttp, cache, encryption, blade templating and whoops error handler for WordPress

README 文档

README

IllumiPress logo

IllumiPress

IllumiPress is a simple wrapper for some of the laravel 5 illuminate packages, it allows users to integrate some of the joyful features of Laravel into wordpress.

We currently integrate WordPress with Laravel Blade, HTTP Requests, Responses, Validator and Support (e.g collections, dd, string helpers etc), ZTTP, Caching (redis, memcached, file) and Ecryption

Installation

The easiest way to install is via composer e.g composer require owenmelbz/illumipress from within your project root.

Even if your project is not using composer you can use the above command, but then you must manually include vendor/autoload.php in your project, for WordPress consider using the functions.php

Features

As the illuminate packages require the illuminate/support package, you also get access to an array of magic such as

  • collections via collect
  • both dump and dd
  • array helpers such as data_get, array_wrap, array_dot etc
  • string helpers e.g ends_with, starts_with, str_contains, str_random
  • logical helpers such as optional, tap, throw_if
  • access to Guzzle via kitetail\zttp and a http() helper
  • laravel blade template rendering using filename.blade.php allowing view('component.sidebar') etc

You can see a full list of included components https://github.com/illuminate/support

Usage

The package has a child class which extends the core illuminate classes to add some additional helper functions.

Request Class

This does not currently have any custom functionality, you should be able to use the documentation provided https://laravel.com/docs/5.6/requests - you have access to a global helper request() to get a new instance of the request object, so you can do things such as request()->get('my_posted_data', 'default value') etc.

Response Class

The main difference between the Laravel and this implementation is that typically you must manually use Symfony's "send()" method to complete the request e.g.

return response(['hello' => 'world'])->send();

There are however custom helpers on top to provide a consistent ajax style responses, 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}
}

You can also add custom meta to the response, useful for things such as "next" and "prev" data.

return response('My response')->addMeta(['key' => 'value'])->send();

You can completely overwrite the meta using setMeta method.

Validation class

This provides 2 extra methods on top of the validation class, firstly the ability to return a formatted list of errors using $validator->formattedErrors() and an ajax result using the previously mentioned automatic formatting by $validator->response().

You have the full validation class (https://laravel.com/docs/5.6/validation) under there to use such as

$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
    }
}

By default we only include the default Laravel i18n error messages, you can follow the Laravel documentation for passing in custom messages https://laravel.com/docs/5.6/validation#custom-error-messages

If you need to use translations you can load your custom messages file e.g

$validator = validator($data, $rules);
$validator->setLanguageFile(__DIR__ . '/i18n/french.php');

Laravel Blade

Blade has also been included to allow a more fluent syntax for rendering templates.

By default it is disabled - however you can turn it on by using turn_blade_on() and to turn off using turn_blade_off()

If you name your files template.blade.php Blade can render the template directly, however, if you enable blade and have normal template.php files, it will create a dynamic copy within the wp-content/uploads/.cache/ which will update each time you make a file change.

The integration is loosely based off https://github.com/tormjens/wp-blade which means you get some starter directives such as:

@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

You can return a rendered view by using the view('components.sidebar') helper

Cache

The illuminate\cache package is also included which is available by a global cache() helper, so you can do things such as cache()->put('user_10', 'Taylor') etc.

Currently you can use the file, memcached and redis driver for caching with some basic configurations, Config items are exposed by the following CONSTANTS.

  • Redis -- REDIS_CONNECTION (default = default) -- REDIS_PREFIX (default = illumipress) -- REDIS_HOST (default = 127.0.0.1) -- REDIS_PORT (default = 6379)
  • File -- ILLUMINATE_CACHE (default = wp-uploads/.cache)
  • Memcached -- MEMCACHED_PREFIX (default = illumipress) -- MEMCACHED_HOST (default = 127.0.0.1) -- MEMCACHED_PORT (default = 11211)

An example usage may be

define('ILLUMINATE_CACHE', './cache');

$tweets = cache()->remember('recent_tweets', $cacheLifeTimeInMinutes = 20, function () {
    return $tweets = http('https://twitter.com/illumipress.json');
));

Encryption

The illuminate/encrypter is also included for handling certain sensitive data which can be used via the the encryption global helper.

By default it will look for a constant called ILLUMINATE_ENCRYPTION_KEY which should be a 16 character key which will be used to encrypt the data. Of course you might want to make this unique to each user, to prevent other users decrypting others data.

You can pass in your own encryption key into the helper e.g

$enc = encryption($user->private_key);

$encryptedData = $enc->encrypt('My secret');
$decryptedData = $enc->decrypt($encryptedData);

echo $decryptedData; // My Secret

Whoops

By default (sorry) we turn on the filp/whoops error handler to enable more friendly errors.

You can turn this off and on via turn_whoops_off() and turn_whoops_on()

However when your WordPress configuration defines WP_DEBUG_DISPLAY as false Whoops will disable itself - regardless of what you type.

HTTP Client / Guzzle / cURL / zttp

We also include the kitetail/zttp library for a simple curl access via the http() helper, for full information we recommend checking out the zttp GitHub documentation

$stringResponse = http('https:/www.google.com');

for a simple curl GET request you can use the above, for more complicated requests you can use the fuller syntax, which returns an instance of ZttpResponse

$response = http()->post('https://www.google.com/', ['q' => 'my query']);

if ($response->isOkay()) {
    echo $response->body();
    echo $response->json();
    echo etc...
}

As zttp uses Guzzle under the hood, which means you can also get access to the full guzzle suite and do things such as (new Guzzle\Client)->setBaseUri('https://www.google.com/')->post('search', ['q' => 'query'']);

License

This is a completely free and open source project, feel free to use it for anything you like, if you wish to modify and redistribute it, however, please give some credit back to the original repository.

owenmelbz/illumipress 适用场景与选型建议

owenmelbz/illumipress 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 257 次下载、GitHub Stars 达 14, 最近一次更新时间为 2018 年 03 月 24 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 owenmelbz/illumipress 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 owenmelbz/illumipress 我们能提供哪些服务?
定制开发 / 二次开发

基于 owenmelbz/illumipress 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 257
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 14
  • 点击次数: 12
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 14
  • Watchers: 0
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2018-03-24