我正在尝试在cakephp 3中为多选下拉菜单创建自定义数据类型。我的表单中有一个multiple => true
控件:
- PHP
- HTML
- CSS
当我提交此表单时,我将该控件的值作为数组(0 => PHP, 1 => HTML
)获取,这很好,现在我想以字符串格式保存这些值,如PHP,HTML
并检索再次作为阵列返回。
保存此输入进展顺利,但仅以string
的形式检索数据。为此我遵循了这个answer并创建了一个自定义数据类型:
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;
}
}
如何修改此代码
返回array
,以便我的表单会自动从多个选择框中选择值。
就会返回string
。
答案 0 :(得分:0)
正如评论中所提到的,您最好正确地规范化您的架构并使用belongsToMany
关联。数据(目前)只是“装饰”的事实并不是放弃正常化的好理由。
话虽如此,这种类型看起来还不错。如果仅检索数据存在问题,那么我只能猜测实际上没有应用该类型,这可能是检索数据的表对象的问题。
但是,您无法使用类型对象在视图层进行决策,到那时类型对象已经完成了它们的工作。如果您需要视图中的数据有时是数组,有时是字符串,那么最好总是以数组格式检索它,并使用帮助器将其转换为字符串列表,或者甚至可以使用虚拟属性相应的实体类(但请记住,实体不应该真正负责演示)。
另见