Dans mon application ZF2, j'ai un formulaire avec plusieurs champs optionnels. Si l'utilisateur décide de laisser ce champ vide, il doit le définir comme NULL dans db, cependant - cela ne fonctionne pas.ZF2 - inputFilter -> Définir la valeur sur null
champ Exemple:
$this->add(array(
'name' => 'productId',
'type' => 'select',
'options' => array(
'value_options' => array(
'global' => 'Global option', // this should be null
'mobile' => 'Another option'
)
),
));
et filtre:
$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();
}
}
),
),
),
));
Ce morceau de code fonctionne lorsque l'option "Mobile" est sélectionné. Cependant, avec l'option 'global', cela ne fonctionne pas. Comme vous pouvez le voir, j'ai fait quelques déboguages de base pour m'assurer que la valeur est surchargée sur le rappel et qu'elle renvoie en effet NULL. Peu importe que validateur dit:
array ( 'productId' => array ( 'callbackValue' => 'The input is not valid', ), )
J'ai donc essayé de revenir sur vrai rappel qui a donné lieu à l'erreur ci-dessous:
Statement could not be executed (23000 - 1452 - Cannot add or update a child row: a foreign key constraint fails (
app
.codes
, CONSTRAINTfk_products_id
FOREIGN KEY (productId
) REFERENCESproducts
(id
)))
Comment suis-je censé passer null à mon db param? Si je coupe complètement ce champ de forme, alors il est ignoré et tout fonctionne.