Mysql ZF2-输入过滤器->;将值设置为null
在我的ZF2应用程序中,我有一个带有几个可选字段的表单。若用户决定将该字段留空,那个么它应该在db中将其设置为NULL,然而—它不起作用 示例字段:Mysql ZF2-输入过滤器->;将值设置为null,mysql,pdo,zend-framework2,Mysql,Pdo,Zend Framework2,在我的ZF2应用程序中,我有一个带有几个可选字段的表单。若用户决定将该字段留空,那个么它应该在db中将其设置为NULL,然而—它不起作用 示例字段: $this->add(array( 'name' => 'productId', 'type' => 'select', 'options' => array( 'value_options' => array( 'global' => 'Global option', // th
$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();
}
}
),
),
),
));
$inputFilter->添加(数组)(
“名称”=>“产品ID”,
“验证程序”=>数组(
排列(
'name'=>'Callback',
“选项”=>数组(
//'消息'=>数组(
//\Zend\Validator\Callback::无效的\u值=>$VALUE,
// ),
“回调”=>函数($value){
如果($value==='global')
{
$value=null;
//返回true;
//回显“”。变量导出($value,true)。“”;
$inputFilter->add(array(
'name' => 'productId',
'required' => false,
'filters' => array(
array('name' => 'ToNull', 'options' => array('type' => \Zend\Filter\ToNull::TYPE_STRING)),
),
));
//模具();
}
}
),
),
),
));
当选择“移动”选项时,这段代码起作用。然而,使用“全局”选项则不起作用。
如您所见,我已经进行了一些基本调试,以确保该值在回调时被覆盖,并且它确实返回NULL。不管怎样,验证器说:
排列(
'productId'=>
排列(
'callbackValue'=>'输入无效',
),
)
因此,我尝试在回调时返回true,这导致了以下错误:
语句无法执行(23000-1452-无法添加或更新子行:外键约束失败(app
codes
,约束fk_products_id
外键(productId
)引用products
(id
))
我应该如何将null参数传递给我的数据库?如果我完全从表单中删除这个字段,那么它将被忽略,并且一切正常 找到了解决方案,其实很简单 我可以将所需的select选项设置为某个特定值,然后使用ToNull filter将其转换为null- $inputFilter的代码: