remzikocak/laravel-options

Laravel 9/10/11 数据库选项/设置包。

2.1.0 2024-01-21 13:57 UTC

This package is auto-updated.

Last update: 2024-09-20 17:03:13 UTC


README

Laravel Options

Laravel 选项包

此包可以帮助您在后台面板中动态添加选项字段。

安装

您可以通过composer安装此包

composer require remzikocak/laravel-options

包将自动注册服务提供者和外观。之后,您需要发布和迁移

php artisan vendor:publish --provider="RKocak\Options\OptionsServiceProvider"
php artisan migrate

这将创建迁移文件和config文件夹中的options.php文件。

用法

首先,您需要创建一个选项组和选项。

use RKocak\Options\Models\Optiongroup;
use RKocak\Options\Models\Option;

Optiongroup::create([
    'label'         => 'My Optiongroup',
    'description'   => 'Optiongroup description', // can be null
    'display_order' => 1,
]);

Option::create([
    'name'          => 'myOption' // should be unique
    'label'         => 'My Option',
    'description'   => 'My awesome Option',
    'value'         => 'Option value',
    'type'          => 'text',
]);

选项组和选项之间存在多对多关系。组可以有多个选项,选项也可以属于多个组。理解这种关系对于在后台面板中显示它们至关重要。

对于分配,使用以下方法

$group = Optiongroup::find(1);
$option = Option::find(1);

// Assign option to a group
$group->options()->attach($option);

// or..
$option->groups()->attach($group);

获取选项

要获取计算值,请使用选项模型的getValue()方法。

$option->getValue();

// This will be the "raw" value that is stored in the database
$option->value

更好的选择是利用Options外观。当您只需要键 => 值存储时,这将缓存选项。

您可以使用以下方式使用它

Options::get('optionName');

// You can pass a second parameter as default value
Options::get('optionName', null);

// or use the helper function
options('optionName', null);

检查给定名称的选项是否存在

Options::has('optionName');

虽然缓存通常会自动刷新,但如果您需要手动刷新,请使用以下方法。

Options::getLoader()->rebuildCache();

添加自定义类型

要添加自定义类型,您需要创建一个扩展 RKocak\Options\Type的类

示例

<?php

namespace App;

use RKocak\Options\Models\Option;
use RKocak\Options\Type;

class MyType extends Type
{

    /**
     * @return string
     */
    public static function getName(): string
    {
        return 'my_type';
    }

    /**
     * @param Option $option
     * @return string
     */
    public function render(Option $option): string
    {
        return '<div>
                    <input type="text" name="options['. htmlspecialchars($option->name) .']" id="options['. htmlspecialchars($option->name) .']" value="'. htmlspecialchars($option->getValue()) .'" class=""/>
                </div>';
    }

    /**
     * Store the new value
     *
     * @param $newValue
     * @param $oldValue
     * @return mixed
     */
    public function store($newValue, $oldValue)
    {
        return $newValue;
    }

    /**
     * Cast value
     *
     * @param $value
     * @return mixed|string
     */
    public function cast($value)
    {
        return (string) $value;
    }

}

然后将类添加到配置文件中的类型数组中。之后,您可以使用它就像使用所有其他类型一样。

渲染编辑表单的HTML

使用一些预先添加的“类型”渲染选项很简单。

$option = Option::first();

$html = $option->renderEditHTML();

// ..or
$html = $option->toHtml();

// Alternatively, you can use the model instance directly in your Blade views:
{{ $option }}

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件