2017-07-08 1 views
0

私のZF2アプリでは、いくつかのオプションのフィールドがあるフォームがあります。ユーザーがそのフィールドを空白のままにしておくと、dbでNULLに設定する必要がありますが、動作しません。ZF2 - inputFilter - > 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を返すことを試みた:私は私のデシベルにヌルのparamを渡すことが出来るのですか

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)))

?このフィールドをフォームから完全に切り取った場合、無視され、すべてが機能します。

答えて

0

見つかった解決策、それは実際にはとても簡単です。

私はいくつかの特定の値に必要な選択オプションを設定して、ヌルに変換するToNullフィルタを使用することができます - $ inputFilterため https://framework.zend.com/manual/2.4/en/modules/zend.filter.null.html

コード:

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