krisanalfa / b-comp
Bono PHP 框架的组件
Requires
- monolog/monolog: 1.12.*
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.macbook
在 local
列表中。相反,当机器知道应用程序在名为 semut
的主机上运行时,提供者将尝试寻找名为 {base_path_bono_app}/config/env/remote.php
的配置文件,因为 farid.macbook
在 remote
列表中。此外,如果主机名为 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
,如果应用程序已经准备好进入生产阶段。此外,请确保 debug
和 bono.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"
还有更多,具体请查看源代码。