Cakephp 3:自定义数据类型无法正常工作



我正在尝试在 cakephp 3 中为多选下拉列表创建自定义数据类型。我的窗体中有一个multiple => true控件:

- PHP
- HTML
- CSS

当我提交此表单时,我以数组 (0 => PHP, 1 => HTML( 的形式获取该控件的值,这很好,现在我想像这样将这些值保存为字符串格式PHP,HTML并再次检索为数组。

此输入的保存进展顺利,但数据仅以string的形式检索。为此,我遵循了这个答案并创建了一个自定义数据类型:

class MultiSelectType extends Type
{
public function toPHP($value, Driver $driver)
{
if (!$value) {
return null;
}
return explode(',', $value);
}
public function marshal($value)
{
return explode(',', $value);
}
public function toDatabase($value, Driver $driver)
{
return implode(',', $value);
}
public function toStatement($value, Driver $driver)
{
if ($value === null) {
return PDO::PARAM_NULL;
}
return PDO::PARAM_STR;
}
}

如何修改此代码

  1. 以恢复array,以便我的表单将自动从多个选择框中选择值。

  2. 每当我想将该值显示为字符串时,都会取回string

如注释中所述,您最好正确规范化架构并使用belongsToMany关联。数据(目前(只是"装饰"这一事实并不是放弃规范化的好理由。

话虽如此,该类型看起来还可以。如果仅检索数据存在问题,那么我只能猜测该类型实际上没有被应用,这可能是检索数据的表对象的问题。

但是,您不能使用类型对象在视图层做出决策,此时类型对象已经完成了它们的工作。如果您需要视图中的数据有时是数组,有时是字符串,那么最好始终以数组格式检索它,并使用帮助程序将其转换为字符串列表,甚至可能在相应的实体类上使用虚拟属性(但请记住,实体不应该真正负责表示(。

参见

  • >创建帮助程序>帮助程序>视图的说明书
  • Cookbook> Database Access & ORM> Entities> Create Virtual Properties

最新更新