danielrhodeswarp / kimino-config
为Laravel项目提供简单配置设置和获取
Requires
- php: >=5.3.0
- illuminate/support: ~5.1
This package is not auto-updated.
Last update: 2024-09-25 23:15:26 UTC
README
听起来很奇怪。这是什么?
这是一个Laravel 5包,可以快速启用数据库设置和获取管理员或应用程序级别的设置;这些设置在应用程序的生命周期中可能会被修改。
它有什么好处?
它适用于您感觉到(或知道)将在未来发生变化的项目规格的准备工作。也适用于试验不同的算法。也适用于实验无法由每个人决定的实现或设计规范。也适用于规则包。
那么v0.0.5版本中有什么新内容?
- 文档
- 改进了纯视图
- 添加了Foundation视图
- 注释并清理了代码
- 视图、配置和公共文件都可以通过vendor:publish发布(可以一起或单独发布)
它包含什么?
- 设置表的迁移(你需要运行这个!)
- 可选的Artisan命令,用于生成一些示例设置
- 控制器、路由和视图,用于在HTML表单中查看和更新设置
- 上面的表单视图可以发布到您的项目中
- 可发布的配置文件
- 纯或Foundation HTML视图(需要发布Foundation资源)
- Artisan命令,用于查看所有/特定的设置
- Artisan命令,用于更新一个设置
我如何安装这个包?
- 在您的Laravel 5项目的根目录中运行
composer require danielrhodeswarp/kimino-config
。(或者您可以将danielrhodeswarp/kimino-config
添加到项目的composer.json文件中 - 然后运行composer install
- 如果您知道自己在做什么。) - 在项目的config/app.php文件的'providers'部分添加
Danielrhodeswarp\KiminoConfig\KiminoConfigServiceProvider::class
。 - 运行迁移以创建kimino_configs表:
php artisan migrate --path=vendor/danielrhodeswarp/kimino-config/src/database/migrations
。 - (如果您想覆盖包配置,请运行
php artisan vendor:publish --tag=config
。如果您想编辑视图,请运行php artisan vendor:publish --tag=views
。如果您想使用Foundation视图覆盖配置,请运行php artisan vendor:publish --tag=public
。或者当然,可以使用php artisan vendor:publish
发布所有内容。请注意,Kimino Config可以在不发布任何内容的情况下使用默认设置正常工作。)
我如何快速检查它?
安装后,您的-project.url/kimino-config将显示Kimino Config的唯一视图 - 一个可以查看数据库中的所有设置并在必要时更新其值的页面。
您还没有任何设置。作为测试,您可以使用php artisan kimino:seed-examples
添加一些示例设置。
php artisan kimino:get-config
将输出所有设置,类似于
php artisan kimino:get-config other_news
将输出指定的设置,例如
php artisan kimino:set-config other_leg
将提示(如果有效)为指定的设置设置新值。
这些设置在数据库中看起来是什么样子?
设置在数据库中有四个字段(还有一个自动递增的id字段)
我如何添加自己的设置?
要添加一个基本的自由文本设置,您只需添加一个新的数据库条目,包含设置名称和相关前缀在 setting 中,以及设置的当前或默认值在 setting 中。我还强烈建议在创建设置时也在 user_hint 中添加一个美好、描述性的提示!
要添加具有限制性值的设置,例如“队列邮件:是或否”或“标题字体: courier、verdana 或 times”,请按照上述相同步骤进行,但也在 valid_values 中放入值限制,如 yes,no
或 courier,verdana,times
(分别)。
请注意,按照设计,没有程序化的方法可以添加新的设置。当然,您可以使用 Laravel seed(例如,使用 php artisan make:seeder SeedMyKiminos
创建),如下所示
<?php
//this is YourProject/database/seeds/SeedMyKiminos.php
use Illuminate\Database\Seeder;
use Danielrhodeswarp\KiminoConfig\KiminoConfig;
class SeedMyKiminos extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//some settings that we want
$settings = [
'sitebot_hometown' => [
'value' => 'Parts Unknown',
'valid_values' => null,
'user_hint' => 'Where should we say that Sitebot comes from?'
],
'sitebot_temperament' => [
'value' => 'cranky',
'valid_values' => 'cranky,irritable,curmudgeonly,peevish,churlish',
'user_hint' => 'What sort of mood is Sitebot in?'
],
//etc
];
//loop through and add to DB (via Eloquent)
foreach ($settings as $name => $setting) {
$config = new KiminoConfig();
$config->setting = $name;
$config->value = $setting['value'];
$config->valid_values = $setting['valid_values'];
$config->user_hint = $setting['user_hint'];
$config->save();
}
}
}
此种子可以通过 php artisan db:seed --class=SeedMyKiminos
运行,这将设置添加到数据库中。
我在项目中如何使用它?
这里有一个简单的示例
<?php
//this is a controller, model, command etc in your project
use Danielrhodeswarp\KiminoConfig\KiminoConfig;
.
.
.
if(KiminoConfig::getSetting('other_news') == 'yes')
{
showOtherNews();
}
else
{
Log::debug('Other news not shown');
}
请注意,如果 some-setting 不存在于数据库中,KiminoConfig::getSetting('some-setting') 将返回 NULL(因此设置值本身不能为 NULL)。因此,这里有一个更健壮的示例
<?php
//this is a controller, model, command etc in your project
use Danielrhodeswarp\KiminoConfig\KiminoConfig;
.
.
.
$settingValue = KiminoConfig::getSetting('very_important_setting');
if(is_null($settingValue))
{
abort(500, 'Bad things have happened');
}
veryImportantThing($settingValue);
这里有处理具有一些 valid_values 设置的设置的可爱方法
<?php
//this is a controller, model, command etc in your project
use Danielrhodeswarp\KiminoConfig\KiminoConfig;
.
.
.
class SomeClassInYourProject
{
//configure auth method based on saved setting
public function handleSomethingAuthMethod()
{
$authMethod = KiminoConfig::getSetting('something_auth_method');
//call appropriate method based on setting value
$this->{"setSomethingAuthMethod_{$authMethod}"}();
}
//set auth method to BASIC
private function setSomethingAuthMethod_basic()
{
fancyThingToSetBasicAuth();
}
//set auth method to DIGEST
private function setSomethingAuthMethod_digest()
{
CoolStuffToSetDigestAuth();
}
}
当然,您可以使用过时的 switch / case 代替。
听起来很棒。有什么需要注意的吗?
-
Kimino Config 故意不与 Laravel 的 config/ 文件夹或 dotenv 内容交互。我认为这些设置是更基础设施/服务/ DevOps 风格的。
-
无法通过表单或控制台自动 添加 设置。
接下来在您的 TODO 列表中是什么?
- 实现设置名称分隔符的配置
- 实现 include_prefix_on_html_form_view 的配置
- 检查是否在 Laravel 5.0 和 5.1 中实际工作(5.2 一定没问题)
- 检查主包括应用程序的 BaseController(用于安全门等)
- 可能还需要将迁移设置为可发布的
- /vendor 文件夹(以及 composer require)用于捆绑的 Foundation 内容
- Twitter Bootstrap 视图
- 提交表单后的会话消息
- 记录 KiminoConfig::withPrefix('prefix') 本地作用域
- 可能记录一些获取和遍历 KiminoConfigs 的 Laravel 风格的通用示例
什么困扰着你?
- 围绕 Composer 包中的 db:seed 的命名空间问题...
- 似乎无法在
return "<?php ... ?>"
中的 Blade::directive() 部分引入 $variables
为什么这个 readme 里的每一件事都是一个问题?
为什么不呢? :D