judahnator / laravel-option
一个简单的Laravel选项包
Requires
- php: >=7.1
- judahnator/option: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.12
- mockery/mockery: ^1.0
- orchestra/testbench: ~3.0
- phpstan/phpstan: ^0.10
- phpunit/phpunit: ^7.1
README
这是一个为Laravel提供键=》值的选项存储的简单包。
这个包受到了WordPress get_option()
功能的启发。如果您对构建非Laravel实现感兴趣,请查看我的 judahnator/option
包。这是一个简单的键/值存储,用于保持基本站点设置的持久性,特别是那些太频繁更改以至于无法添加到env文件,但又不足以创建整个应用程序模型的设置。
安装
安装相对简单。只需通过composer要求此包。
composer require judahnator/laravel-option
您还需要发布一些资源。运行 php artisan vendor:publish --tag=config
命令,并按照那里的说明进行发布。
最后,您需要配置您想要存储选项的方式。打开新创建的 config/options.php
文件,并查看那里的选项。以下是每个驱动选项如何工作的基本概述。
缓存
使用Laravel缓存子系统。您的选项将在您清除应用程序缓存之前持续存在。
数据库
使用数据库表存储配置值。您需要发布并运行迁移才能使用此功能。运行 php artisan vendor:publish --tag=migrations
然后运行 php artisan migrate
JSON
将所有选项存储在一个扁平的JSON文件中。为了使用此驱动程序,您需要创建一个选项文件,并将“options_file”设置在该文件中,设置为其实际位置。
强烈建议将选项文件排除在版本控制之外。也许可以有一个 'options.json.example' 文件作为模板,将 'options.json' 文件放入您的gitignore文件中。
内存
100%内存驱动。选项在重新加载后将不会持续存在。这主要用于原型设计或调试。
使用
使用非常简单。
- 获取选项
\Option::get('foo', '如果找不到foo的默认可选值')
- 检查选项是否存在
\Option::has('foo')
- 设置(或覆盖)选项
\Option::set('foo', 'foos value')
- 删除选项
\Option::delete('foo')
出于方便起见,我还添加了一些辅助函数。它们只是上面函数的别名,但您也可以自由使用它们。
delete_option($key)
get_option($key, $default)
has_option($key)
set_option($key, $value)
您还可以通过Artisan命令与库进行交互,这有助于自动化和其他CLI端点。以下是一些示例:
# Deletes the option if it exists, throws an error if not
php artisan option:delete option_to_delete;
# Prints 'Yes' or 'No'
php artisan option:has my_option;
# Prints the value of the option.
# If the option is not a string the value will be "print_r"'d
php artisan option:get super_option
# Sets the value of an option
php artisan option:set some_option some_value
自定义驱动程序
如果您不喜欢任何默认驱动程序并想使用自己的,没问题!这样做的方法相当简单。
创建您的“驱动程序”,这是一个实现 \judahnator\Option\OptionInterface
接口的类。该接口定义了所有必需的函数。如果您需要起点,可以扩展 \judahnator\LaravelOption\Drivers\MemoryDriver
类。查看 \judahnator\LaravelOption\Drivers\JsonFileDriver
了解如何做到这一点。
一旦您编写了驱动程序,您需要将其添加到配置文件中。对于“driver”选项,添加到您的类的完整路径。例如
[
// ...
'driver' => \Path\To\Custom\Driver::class,
// ...
]