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

Cakephp 3: Custom Datatype not working properly

我正在尝试在 cakephp 3 中为多 select 下拉列表创建自定义数据类型。我的表单中有一个 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 以便我的表单自动 select 来自多个 select 框的值。

  2. 以便在我想将该值显示为字符串时返回 string

如评论中所述,您最好正确规范化架构并使用 belongsToMany 关联。数据(当前)仅为 "decoration" 的事实并不是放弃规范化的好理由。

话虽如此,字体看起来还不错。如果只是检索数据有问题,那么我只能猜测实际上没有应用该类型,这可能是检索数据的table对象的问题。

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

另见