rrd108 / cakephp-datalist
CakePHP 3 的 Datalist 插件
Requires
- cakephp/cakephp: ^3.6
Requires (Dev)
- phpunit/phpunit: ^5.7.14|^6.0
This package is auto-updated.
Last update: 2024-09-07 05:25:51 UTC
README
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] ); ?>