geniusts/preferences

为具有多个组件和包的应用程序生成偏好页面的非常简单的方法。

2.4 2023-11-13 03:15 UTC

This package is auto-updated.

Last update: 2024-09-13 05:10:13 UTC


README

此包用于生成应用程序的偏好页面,特别是如果您有很多具有不同设置的组件,并且希望将其存储在数据库中并通过 Laravel 的默认配置功能使用。

安装

  1. 下载包
  • 命令行

composer require geniusts/preferences

  • 或添加到 composer 文件
{
    "require": {
        "geniusts/preferences": "^2.0"
    }
}

并运行: composer update

  1. 服务提供者
  • 如果您使用 Laravel >=5.5 且已启用 auto-discover,则无需执行任何操作。
  • 如果您的 Laravel <5.5 或您禁用了 auto-discover,请将 ServiceProvider 添加到 config/app.php 中的 providers 数组。
    GeniusTS\Preferences\PreferencesServiceProvider::class,

注意:如果您使用 Laravel 5.5 或更高版本,无需添加,它将自动发现

  1. 控制器和迁移

将包的控制器文件发布到您的应用程序。运行以下命令

php artisan vendor:publish --provider="GeniusTS\Preferences\PreferencesServiceProvider" --tag=controller

您也可以通过以下命令发布视图和迁移

php artisan vendor:publish --provider="GeniusTS\Preferences\PreferencesServiceProvider" --tag=views
php artisan vendor:publish --provider="GeniusTS\Preferences\PreferencesServiceProvider" --tag=migrations

无需发布迁移文件,只需运行迁移命令来执行迁移。

php artisan migrate

如果您在保存数据时想使用 DB 事务,请将 protected $transactions = true; 添加到 SettingsController

  1. 路由和视图

将两个路由添加到您的路由文件

Route::get('/settings/{preferences_domain?}', 'SettingsController@edit')
    ->midllware(//Apply your middleware)
    
Route::patch('/settings/{preferences_domain?}/{preferences_element?}', 'SettingsController@update')
    ->midllware(//Apply your middleware)

现在您必须创建一个 preferences.settings 视图,并使用您的应用程序布局包含 geniusts_preferences::settings 视图。

@include('geniusts_preferences::settings');

使用

创建设置选项卡

  1. 创建设置视图: 例如:settings/general.blade.php
    <div class="row">
        <div class="col-xs-12">
            <div class="form-group">
                <label> Test </label>
                <div class="input-group">
                    <div class="input-group-addon">
                        <i class="glyphicon glyphicon-alert"></i>
                    </div>
    
                    <input class="form-control" 
                           name="general[project_name]"
                           value="{{ old('general.project_name', config('preferences.general.project_name')) }}">
                </div>
            </div>
        </div>
    </div>
  1. 将选项卡注册到 PreferencesManager
    use GeniusTS\Preferences\Models\Domain;
    use GeniusTS\Preferences\Models\Element;
    
    // Create a settings Domain
    // Domain(string $key, View $view, string $label)
    // you can use label like 'labels.general', because the view execute "trans" function
    $domain = new Domain('general', view('settings.general'), 'General');
    
    // Add the inputs names and validation rules
    // Element(string $name, mixed $rules)
    $domain->addElement(new Element('project_name', 'required|max:255'));
    
    // OR for array values
    $domain->addElement(new Element('options', ['options' => 'array', 'options.*' => 'required|integer']));
    
    
    // register the Domain to the Preferences manager
    $manager = resolve('preferences'); // or app('preferences') for versions older than 5.3
    $manager->addDomain($domain);

您可以在包服务提供者的 boot 函数中注册 domains

访问已保存的设置

使用默认的 config 函数或 Config 类来获取设置值:config('preferences.{domain}.{element}')

config('preferences.general.project_name');

从版本 1 迁移

  1. 更新偏好视图中的输入名称。例如:您有一个 general 域,它具有 project_name 元素,那么输入名称应该是 general[project_name]

  2. 更新项目中 SettingsController 内的 edithandleSuccessResponse 方法的声明。

   public function edit($domain = null) {
        // Logic here
   }
       
    protected function handleSuccessResponse($domain, $element) {
        // Logic here    
    }

许可

此包是免费软件,根据 MIT 许可证条款分发。