Php 表单中的字段的行为类似于“必需”,尽管它们不是必需的

Php 表单中的字段的行为类似于“必需”,尽管它们不是必需的,php,validation,zend-framework2,Php,Validation,Zend Framework2,我正在尝试为我的应用程序中的实体位置设置编辑表单。为此,我在控制器中编写了表单PlaceForm、字段集PlaceFieldset、.phtml页面和函数。因为我是zf2的新手,所以我将注意力集中在他们主页上的tutorlias上。我已经看到,框架提供了验证,但在我的例子中,它不是必需的。字段集中添加的字段都没有required属性,但是当我在所有空字段下提交表单时,我得到的消息值是必需的,不能为空,尽管它实际上不是必需的。我不想在这个问题中创建代码墙,所以我将从控制器的函数开始。如果有人想帮助

我正在尝试为我的应用程序中的实体位置设置编辑表单。为此,我在控制器中编写了表单PlaceForm、字段集PlaceFieldset、.phtml页面和函数。因为我是zf2的新手,所以我将注意力集中在他们主页上的tutorlias上。我已经看到,框架提供了验证,但在我的例子中,它不是必需的。字段集中添加的字段都没有required属性,但是当我在所有空字段下提交表单时,我得到的消息值是必需的,不能为空,尽管它实际上不是必需的。我不想在这个问题中创建代码墙,所以我将从控制器的函数开始。如果有人想帮助我解决这个问题,请告诉我,我会提前更新代码表单、字段集等的任何其他部分

...
public function editPlaceAction() {
    $id = $this->params()->fromRoute('id');
    $uiServiceProvider = $this->getServiceLocator()->get('FamilyTree\Service\UiServiceProvider');
    $placeArray = $uiServiceProvider->fetchSinglePlaceById($id);

    $place = new Places($placeArray);
    $form = new PlaceForm();
    $form->bind($place);

    $request = $this->getRequest();
    if ($request->isPost()) {
        $form->setData($request->getPost());

        if ($form->isValid()) {
            var_dump($place);
        }
    }

    $view = new ViewModel(array(
        'form' => $form,
        'title'=>"Edit place"
    ));
    $view->setTemplate("family-tree/family-tree-maintenance/editPlace");

    return $view;
}
...
在这里你可以看到我的字段集是什么样子

<?php

namespace Places\Form;

use Zend\Form\Fieldset;

class PlaceFieldset extends Fieldset {

public function __construct() {
parent::__construct('place');

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

    $this->add(array(
        'name' => 'name',
        'type' => 'Text',
        'options' => array(
            'label' => 'Name',
        ),
    ));

    $this->add(array(
        'name' => 'admUnit1',
        'type' => 'Text',
        'options' => array(
            'label' => 'AdmUnit1',
        ),
    ));

    }
}

不要使用“$form->isValid”。我认为这将自动验证字段。您还没有InputFilter。首先感谢您的回答。我删除了$form->isValid,这是真的,这些字段不再是必需的,但现在还有其他问题。“我的位置”对象不会使用表单中的新值更新。我认为,它是由框架本身在后台执行的。提交后如何从表单中提取新值?谢谢!您可以直接从请求对象获取新值。看见