rrd108/cakephp-datalist

CakePHP 3 的 Datalist 插件

安装: 589

依赖: 0

建议: 0

安全性: 0

星标: 6

关注者: 2

分支: 0

公开问题: 0

类型:cakephp-plugin

1.1.1 2018-11-23 18:21 UTC

This package is auto-updated.

Last update: 2024-09-07 05:25:51 UTC


README

Build Status codecov

CakePHP 的 Datalist 插件

许多 HTML 5 的新控件都自动由 CakePHP 支持。不幸的是,datalist 默认不支持。

使用 HTML 5 的 datalist 元素,你可以创建一个类似于 select 元素的控件,但使用 datalist 你不必强制选择一个选项,也可以添加任何新的值。

如果你在寻找一个 CakePHP 插件来提供纯 datalist 支持,你应该检查 dereuromark/cakephp-tools

此插件为纯 datalist 添加了一个额外的功能。如果你创建了一个新的选项,那么 CakePHP 将将值保存到关联模型作为新记录。

向后兼容性

从版本 1.0.0 开始,我们已经重命名了小部件,所以在 AppView.php 和你的模板文件中,你应该使用 datalistJs 而不是 datalist,如下所述。对于破坏向后兼容性,我们表示歉意,但之前的版本安装量很少,而且由于 dereuromark/cakephp-tools 实现了纯 datalist,这是最简单的方法...

安装

您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。

安装此插件的建议方法是使用 composer

composer require rrd108/cakephp-datalist

然后,您应该在终端中运行以下命令来加载插件。

bin/cake plugin load Datalist

由于插件扩展了核心 HTML 小部件,因此您应该在 /src/View/AppView.php 文件中加载表单助手,如下所示

public function initialize() 
{ 
    parent::initialize(); 
    $this->loadHelper('Form', [
        'templates' => 'Datalist.form-templates',
        'widgets' => [
            'datalistJs' => ['Datalist\View\Widget\DatalistJsWidget']
        ]
    ]);
} 

用法

在您想要使用 datalist 的任何模型中,您应该添加 datalist 行为。例如,在您的 /src/Model/Table/SkillsTable.php 中,您应该有如下代码,其中 Languages 应与 SkillsTable 关联,而 name 是我们想要使用 datalist 的字段。

public function initialize(array $config)
{
    parent::initialize($config);

    $this->addBehavior(
        'Datalist.Datalist', 
        ['Languages' => 'name']
    );
    
    $this->belongsTo('Languages', [
        'foreignKey' => 'language_id',
        'joinType' => 'INNER'
        ]);
}

如果您想要更多 datalists,您可以在行为中添加更多模型。

$this->addBehavior(
    'Datalist.Datalist', 
    ['Languages' => 'name', 'Countries' => 'country']
);
}

然后在您的控制器中执行简单的查找操作并将结果设置到视图中。

//src/Controller/SkillsController.php
public function add()
{
    // your controller code
    $languages = $this->Skills->Languages->find('list', ['limit' => 200]);
    $this->set(compact('languages'));
}

这样,$languages 变量就可在 /src/Template/Skills/add.ctp 文件中使用。

<?= $this->Form->create($skill) ?>
<?php
    echo $this->Form->control(
        'language_id',
        ['type' => 'datalistJs', 'options' => $languages]
    );
?>

最终结果应该非常出色,如果您不选择选项之一而输入新的值,CakePHP 将将其保存为关联模型中的新条目。 Alt Text