danielrhodeswarp/kimino-config

为Laravel项目提供简单配置设置和获取

0.0.6 2016-01-17 22:30 UTC

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命令,用于更新一个设置

我如何安装这个包?

  1. 在您的Laravel 5项目的根目录中运行composer require danielrhodeswarp/kimino-config。(或者您可以将danielrhodeswarp/kimino-config添加到项目的composer.json文件中 - 然后运行composer install - 如果您知道自己在做什么。)
  2. 在项目的config/app.php文件的'providers'部分添加Danielrhodeswarp\KiminoConfig\KiminoConfigServiceProvider::class
  3. 运行迁移以创建kimino_configs表:php artisan migrate --path=vendor/danielrhodeswarp/kimino-config/src/database/migrations
  4. (如果您想覆盖包配置,请运行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,nocourier,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