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;
}
}
如何修改此代码
返回 array
以便我的表单自动 select 来自多个 select 框的值。
以便在我想将该值显示为字符串时返回 string
。
如评论中所述,您最好正确规范化架构并使用 belongsToMany
关联。数据(当前)仅为 "decoration" 的事实并不是放弃规范化的好理由。
话虽如此,字体看起来还不错。如果只是检索数据有问题,那么我只能猜测实际上没有应用该类型,这可能是检索数据的table对象的问题。
但是你不能在视图层使用类型对象来做决定,那时类型对象已经完成了它们的工作。如果您需要视图中的数据有时是一个数组,有时是一个字符串,那么您最好始终以数组格式检索它,并使用帮助程序将其转换为字符串列表,或者甚至可以使用虚拟 属性 在各自的实体上 class(但请记住,实体不应该真正负责表示)。
另见
我正在尝试在 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;
}
}
如何修改此代码
返回
array
以便我的表单自动 select 来自多个 select 框的值。以便在我想将该值显示为字符串时返回
string
。
如评论中所述,您最好正确规范化架构并使用 belongsToMany
关联。数据(当前)仅为 "decoration" 的事实并不是放弃规范化的好理由。
话虽如此,字体看起来还不错。如果只是检索数据有问题,那么我只能猜测实际上没有应用该类型,这可能是检索数据的table对象的问题。
但是你不能在视图层使用类型对象来做决定,那时类型对象已经完成了它们的工作。如果您需要视图中的数据有时是一个数组,有时是一个字符串,那么您最好始终以数组格式检索它,并使用帮助程序将其转换为字符串列表,或者甚至可以使用虚拟 属性 在各自的实体上 class(但请记住,实体不应该真正负责表示)。
另见