gocrew/laravel-settings

此包已被弃用且不再维护。作者建议使用 anlutro/l4-settings 包。

Laravel 中的持久化设置。

1.0.4 2016-02-19 19:32 UTC

This package is not auto-updated.

Last update: 2017-11-19 20:17:10 UTC


README

Build Status Latest Stable Version Latest Unstable Version License

安装

将 Presenter 添加到您的 composer.json 文件中

"require": {
    "gocrew/laravel-settings": "~1.0"
}

现在,从您的项目根目录运行 composer update 命令

composer update

注册包

app/config/app.php 中包含服务提供者。服务提供者对于生成 artisan 命令是必需的。

'providers' => [
    ...
    gocrew\LaravelSettings\SettingsServiceProvider::class
    ...
];

现在运行 php artisan vendor:publish 来发布配置文件和迁移。配置文件将允许您控制使用哪种存储引擎以及一些存储特定设置。

可选地,您还可以注册此包的 Facade。

'facades' => [
    ...
    'Setting' => gocrew\LaravelSettings\Facade::class
    ...
];

重要如果您使用数据库驱动程序,不要忘记通过运行 php artisan migrate 来迁移数据库。

用法

您可以通过其 Facade 或通过类型提示 gocrew\LaravelSettings\Contracts\SettingsContract 接口来访问设置存储。

Setting::set('foo', 'bar');
$setting = Setting::get('foo', 'default value');

显式调用 Setting::save() 以保存所做的更改。

自动保存

如果您将中间件 gocrew\LaravelSettings\Middleware\SavableMiddleware.php 添加到 app\Http\Kernel.php 中的 middleware 列表中,设置将在所有 HTTP 请求结束时自动保存。您仍然需要在控制台命令、队列工作者等地方显式调用 Setting::save()

数据库存储

如果您想在同一个数据库中为多个用户/客户存储设置,可以通过指定额外的列来实现。

Setting::setExtraColumns(array(
	'user_id' => Auth::user()->id
));

当检索设置时,现在会在数据库查询中添加 where user_id = x,当保存新的设置时,将填充 user_id

如果您需要更精细地控制哪些数据被查询,可以使用 setConstraint 方法,它接受一个带有两个参数的闭包。

  • $query 是查询构建器实例
  • $insert 是一个布尔值,告诉您查询是插入还是不是。如果是插入,通常不需要对 $query 做任何事情。
Setting::setConstraint(function($query, $insert) {
	if ($insert) return;
	$query->where(/* ... */);
});

自定义驱动程序

此包在底层使用 Laravel 的 Manager 类,因此很容易添加自己的自定义设置存储驱动程序。您需要做的就是扩展抽象类 gocrew\LaravelSettings\Drivers\Driver,实现抽象方法并调用 Setting::extend

class MyDriver extends gocrew\LaravelSettings\Drivers\Driver 
{
	/**
     * Read the data from the store.
     *
     * @return array
     */
    protected function read()
    {
        // TODO: Implement read() method.
    }

    /**
     * Write the data into the store.
     *
     * @param  array $data
     *
     * @return void
     */
    protected function write(array $data)
    {
        // TODO: Implement write() method.
    }
}

Setting::extend('mydriver', function($app) {
	return $app->make('MyDriver');
});

许可证

此存储库的内容是在 MIT 许可证 下发布的。