0

フロントエンド

Ext Js 4.2

Ext.data.writer.Writer の構成、writeAllFields を false に設定すると、変更されたフィールドのみが送信されます。 http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.writer.Writer-cfg-writeAllFields

バックエンド

Zend フレームワーク 2.2

class SomeForm extends Zend\Form\Form {

    public function __construct($name = null, $options = array()) {
        parent::__construct($name, $options);

        $this->add(array(
            'name' => 'id',
            'type' => 'Zend\Form\Element\Hidden',
        ));

        $this->add(array(
            'name' => 'field_foo',
            'type' => 'Zend\Form\Element\Text',
        ));

        $this->add(array(
            'name' => 'field_bar',
            'type' => 'Zend\Form\Element\Text',
        ));        
    }
}

class SomeFormFilter extends Zend\InputFilter\InputFilter {

    public function __construct() {    
        $this->add(array(
            'name' => 'id',
            'required' => false
        ));

        $this->add(array(
            'name' => 'field_foo',
            'required' => true
        ));

        $this->add(array(
            'name' => 'field_bar',
            'required' => true
        ));
    }
}

サービス層では、送信されたデータが有効かどうかを確認します

http://framework.zend.com/apidoc/2.2/classes/Zend.Form.Form.html#isV​​alid

$form->isValid()

バックエンドの受信時

  1. すべてのフィールドを変更: Request Method: PUT Form Data: {"field_foo":"value string","field_bar":"value string", "id":"22"} そうです。field_foo と field_bar は必須で、true を返します。

  2. field_foo のみ変更: リクエスト メソッド: PUT フォーム データ: {"field_foo":"value string","id":"22"} isValid() は、field_bar が必要なため false を返します。

解決への道は?

フィールドを削除しますか? http://framework.zend.com/apidoc/2.2/classes/Zend.Form.Form.html#remove

または?

4

2 に答える 2

0

更新操作用に別の inputFilter を提供する

また

に設定writeAllFieldstrue、すべての値を送信して保存します

于 2013-11-08T15:57:25.493 に答える
0

関心のあるフィールドのみを検証します。この場合、リクエストで送信されたフィールドのみ。

public function foo($rawData) // array('id' => 1, 'field_foo' => 'value')
{ 
    $form = $this->getForm(); // @var Zend\Form\Form

    $group = array_keys($rawData); // array(0 => 'id', 1 => 'field_foo')
    $form->setValidationGroup($group);

    $form->setData($rawData); // array('id' => 1, 'field_foo' => 'value')

    $isValid = $form->isValid();

    // some code       
}

https://framework.zend.com/manual/2.0/en/modules/zend.form.quick-start.html#validation-groups

于 2013-11-12T13:00:02.727 に答える