krisanalfa/b-comp

Bono PHP 框架的组件

0.0.3 2015-04-09 12:13 UTC

This package is auto-updated.

Last update: 2024-08-29 04:09:03 UTC


README

B-Comp 是我经常在各个项目中使用的 Bono 的组件。由于 Bono 缺少一些功能,我在一个项目中需要它们,所以我创建了此模块。为了帮助朋友们更快地构建应用程序,我创造了这个模块组件。官方上,Viper Arch 使用 BComp 作为应用程序的“类固醇”。大致上(暂时),B-Comp 可以添加以下功能

  • 日志记录
  • 简单的版本控制系统
  • 辅助工具

安装

只需在 composer.json 文件中添加如下内容

"require": {
    "krisanalfa/b-comp": "dev-master"
}

然后执行,composer update。或者也可以通过命令 composer require krisanalfa/b-comp dev-master 来实现。

日志记录

可以通过添加 LogProvider 提供者来将日志记录添加到 Bono 中。方法是将 LogProvider 添加到你的 bono.providers 配置中

'bono.providers' => array(
    'BComp\\Provider\\LogProvider' => array(
        'log.name' => 'My Awesome App',
    ),
),

配置

大致上,以下是可以修改的配置。

log.name

应用程序名称作为日志通道的标识。默认 APP LOGGER

log.path

你保存应用程序日志的路径。默认 logs。如果 logs 文件夹不存在,Provider 将自动为你创建它。它的位置相对于 Bono 应用程序的基础路径。

log.dateformat

日志文件中事件日志的日期格式。默认 Y-m-d H:i:s

log.fileformat

日志文件的格式。默认 Y-m-d

log.outputformat

日志输出的格式。默认

[%datetime%] - [%level_name% ON %channel%] - [%message%]
    [MESSAGE CONTEXT]        %context%
    [ADDITIONAL INFORMATION] %extra%\n
  • %datetime% 是事件日志被写入的日期/时间。
  • %level_name% 是事件日志的日志级别 (EMERGENCY|ALERT|CRITICAL|ERROR|WARN|NOTICE|INFO|DEBUG)。
  • %message% 是日志记录时的消息。
  • %context% 是写入事件日志中的上下文,它的值可以是数组,将自动转换为 JSON。
  • %extra% 是写入事件日志中的额外信息。

使用方法

添加提供者后,我们可以从 Slim Container 访问 log

$log = App::getInstance()->log;

// Usage $log->{logLevel}($message, array $context = array());

$log->emergency('Foo', ['foo' => 'bar']);
$log->alert('Foo', ['foo' => 'bar']);
$log->critical('Foo', ['foo' => 'bar']);
$log->error('Foo', ['foo' => 'bar']);
$log->warn('Foo', ['foo' => 'bar']);
$log->notice('Foo', ['foo' => 'bar']);
$log->info('Foo', ['foo' => 'bar']);
$log->debug('Foo', ['foo' => 'bar']);

简单的版本控制系统

简单的版本控制系统将帮助你分离机器之间的配置,此外,它还可以管理用于生产环境和开发环境的配置。实际上,Bono 已经具有这种能力,但对我来说维护起来仍然相当困难,因此我提供了一个更容易维护的配置管理方法。

安装

VersionProvider 添加到你的 bono.providers 配置中。

'bono.providers' => array(
    'BComp\\Provider\\VersionProvider' => array(
        // Enter the team hostnames computer here
        'local' => array(
            'farid.macbook',
            'ali.macbook',
            'alfa.macbook',
        ),

        // Enter the remote hostnames computer here
        'remote' => array(
            'semut',
            'lebah',
            'cicak',
        ),
    ),
),

当机器知道应用程序在名为 farid.macbook 的主机上运行时,提供者将尝试寻找名为 {base_path_bono_app}/config/env/local.php 的配置文件,因为 farid.macbooklocal 列表中。相反,当机器知道应用程序在名为 semut 的主机上运行时,提供者将尝试寻找名为 {base_path_bono_app}/config/env/remote.php 的配置文件,因为 farid.macbookremote 列表中。此外,如果主机名为 alfa.macbook,提供者将尝试寻找名为 {base_path_bono_app}/config/host/alfa.macbook.php 的配置文件。要将应用程序的状态从 development 更改为 production,请修改以下 Bono\App 实例化配置

use Bono\App;

// Create bulb application
$app = new App(
    array(
        // Should application autostart after construction?
        'autorun'    => false,

        // The mode of application
        'mode'       => 'development',

        // Enable Slim debug
        'debug'      => true,

        // Enable Bono debug
        'bono.debug' => true,
    )
);

$app->run();

mode 部分修改为 production,如果应用程序已经准备好进入生产阶段。此外,请确保 debugbono.debug 的值为 false。如果应用程序处于生产模式,则提供者将寻找名为 {base_path_bono_app}/config/mode/production.php 的配置文件。反之,如果应用程序处于开发模式,则提供者将寻找名为 {base_path_bono_app}/config/mode/development.php 的配置文件。

辅助工具

目前只有两个助手函数,分别是 Arr(用于数组助手函数)和 Str(用于字符串助手函数)。

Arr

以下是助手函数的使用示例

use BComp\Helper\Arr as A;

$array = [
    'name' => 'Alfa',
    'sex' => 'Male',
    'age' => 23,
];

A::except($array, ['sex']); // hasilnya ['name' => 'Alfa', 'sex' => 'Male']
A::isEmpty($array); // hasilnya false
A::isEmpty(['name' => '', 'age' => '']); // hasilnya true
A::only($array, ['name']); // hasilnya ['name' => 'Alfa']

$multi = [
    ':type_address'     => 'Foo',
    ':type_citizenship' => 'Bar',
    ':type_city'        => 'Baz',
    ':type_country'     => 'Qux',
];

A::replaceKey($multi, ':type', 'user');
// Hasilnya
// $array = [
//     'user_address'     => 'Foo',
//     'user_citizenship' => 'Bar',
//     'user_city'        => 'Baz',
//     'user_country'     => 'Qux',
// ]

$header = [
    ':type_address',
    ':type_citizenship',
    ':type_city',
    ':type_country',
];

A::replaceValue($header, ':type_', '');

// Hasilnya
// $header = [
//     'address',
//     'citizenship',
//     'city',
//     'country',
// ];

A::depth($multi); // hasilnya 2
A::depth($header); // hasilnya 1

还有更多,具体请查看源代码。

Str

以下是助手函数的使用示例

use BComp\Helper\Str as S;

S::camel("my_method") // "myMethod"
S::contains('my_method', 'x'); // false
S::contains('my_method', 'd'); // true
S::contains('my_method', ['x', 'd']); // true
S::endsWith('my_method', 'd'); // true
S::endsWith('my_method', 'x'); // false
S::endsWith('my_method', ['x', 'd']); // true
S::is('*.php', 'myFile.php'); // true
S::is('php', 'myFile.php'); // false
S::is('*.php', 'myFile.php'); // true
S::is('php', 'myFile.php'); // false

S::limit("You see me because you haven't overriden templates yet or default routes. May be this is your fist journey through the world of Bono. I wish you will enjoy and get comfy to the world of productive application development.");
// output: "You see me because you haven't overriden templates yet or default routes. May be this is your fist j..."

S::words("You see me because you haven't overriden templates yet or default routes. May be this is your fist journey through the world of Bono. I wish you will enjoy and get comfy to the world of productive application development.", 10));
// output: "You see me because you haven't overriden templates yet or..."

S::parseCallback('Class@methodName', 'defaultMethod'); // ["Class", "methodName"]
S::parseCallback('ClassName', 'defaultMethod'); // ["ClassName", "defaultMethod"]
S::title('this is a title'); // "This Is A Title"
S::slug('mr. ganesha, this is a title'); // "mr-ganesha-this-is-a-title"
S::snake('theCamelCaseVariable'); // "the_camel_case_variable"
S::startsWith('theCamelCaseVariable', 't'); // true
S::startsWith('theCamelCaseVariable', 'z'); // false
S::startsWith('theCamelCaseVariable', ['t', 'z']); // true
S::studly('the_snake_case_class_name'); // "TheSnakeCaseClassName"

还有更多,具体请查看源代码。