gpt4 book ai didi

mysql - ZF2 - inputFilter -> 将值设置为 null

转载 作者:行者123 更新时间:2023-11-29 18:40:07 25 4
gpt4 key购买 nike

在我的 ZF2 应用程序中,我有一个包含多个可选字段的表单。如果用户决定将该字段留空,那么它应该在数据库中将其设置为 NULL,但是 - 它不起作用。

示例字段:

$this->add(array(
'name' => 'productId',
'type' => 'select',
'options' => array(
'value_options' => array(
'global' => 'Global option', // this should be null
'mobile' => 'Another option'
)
),
));

和过滤器:

$inputFilter->add(array(
'name' => 'productId',
'validators' => array(
array(
'name' => 'Callback',
'options' => array(
// 'messages' => array(
// \Zend\Validator\Callback::INVALID_VALUE => $value,
// ),
'callback' => function ($value) {
if($value === 'global')
{
$value = null;
//return true;
// echo '<pre>' . var_export($value, true) . '</pre>';
// die();
}
}

),
),
),
));

这段代码在选择“移动”选项时有效。但是,使用“全局”选项则不起作用。正如您所看到的,我已经完成了一些基本的调试,以确保该值在回调中被覆盖并且它确实返回 NULL。不管验证器说:

array ( 'productId' => array ( 'callbackValue' => 'The input is not valid', ), )

所以我尝试在回调中返回 true,这导致了以下错误:

Statement could not be executed (23000 - 1452 - Cannot add or update a child row: a foreign key constraint fails (app.codes, CONSTRAINT fk_products_id FOREIGN KEY (productId) REFERENCES products (id)))

我应该如何将空参数传递给我的数据库?如果我完全从表单中删除该字段,那么它将被忽略并且一切正常。

最佳答案

找到解决方案,其实很简单。

我可以将所需的选择选项设置为某个特定值,然后使用 ToNull 过滤器将其转换为 null - https://framework.zend.com/manual/2.4/en/modules/zend.filter.null.html

$inputFilter 的代码:

$inputFilter->add(array(
'name' => 'productId',
'required' => false,
'filters' => array(
array('name' => 'ToNull', 'options' => array('type' => \Zend\Filter\ToNull::TYPE_STRING)),
),
));

关于mysql - ZF2 - inputFilter -> 将值设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com