0

前端

分机 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. 修改所有字段:请求方法:PUT 表单数据:{"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() 返回 false,因为 field_bar 是必需的。

解决方法是什么?

删除字段? http://framework.zend.com/apidoc/2.2/classes/Zend.Form.Form.html#remove

或者?

4

2 回答 2

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 回答
0

为更新操作提供不同的 inputFilter

或者

设置writeAllFieldstrue发送和保存所有值

于 2013-11-08T15:57:25.493 回答