加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何在不使用工厂的情况下验证Zend Framework 2中的嵌套

发布时间:2020-12-13 22:10:49 所属栏目:PHP教程 来源:网络整理
导读:我有一个表单类,可以递归地动态创建带元素/字段集的字段集.我这样做是为了将设置[general] [rpp] [value]作为输入名称(例如).生成字段是因为设置是在 XML文件中用户定义的. Fieldsets的创建方式如下: $fieldset = new Fieldset(...);$fieldset-add(...);$fo
我有一个表单类,可以递归地动态创建带元素/字段集的字段集.我这样做是为了将设置[general] [rpp] [value]作为输入名称(例如).生成字段是因为设置是在 XML文件中用户定义的.

Fieldsets的创建方式如下:

$fieldset = new Fieldset(...);
$fieldset->add(...);
$form->add($fieldset);

表格输出正确;一切正常.除了我需要验证.

我的目标是为这些嵌套元素定义验证器和过滤器.我真的很困惑它是如何工作的 – 但它看起来只是表单本身定义了一个input_filter setInputFilter(…)而我不知道如何让它识别递归而没有工厂和专有类的字段集而不是动态.

我明白了吗?

谢谢.

解决方法

我已经想出如何使用验证和过滤器来完成这种高度动态的表单.我将在这里用这个假设的脚本解释:

// create a form instance and a filter instance
$form = new Form();
$filter = new InputFilter();

// create a fieldset instance and another filter instance
$fieldset_a = new Fieldset('general');
$fieldset_a_filter = new InputFilter();

// create element(s) to assign to fieldset
$setting_1 = new Element('setting_1');

// create another input filter for element defining filters and validators
$setting_1_filter = new InputFilter(array(
    'name' => 'setting_1','required' => true,'validators' => array(),// ...
));

// add element to fieldset
$fieldset_a->add($setting_1);
// add fieldset to form
$form->add($fieldset_a);

// add element filter to fieldset filter
$fieldset_a_filter->add($setting_1_filter,'setting_1');
// add fieldset A filter to main input filter
$filter->add($fieldset_a_filter,'general');

$form->setInputFilter($filter);

因此,您可以看到必须为每组元素和每个字段集创建输入过滤器,然后通过它们向后工作,将它们相互添加,直到构建主输入过滤器并将其分配给表单实例.

然后,在运行$form-> setData($this-> request-> getPost()) – $form-> isValid()之后,这将使用提供的验证器和输入名称,例如general [setting_1]

这个响应可能要详细100倍,但它比动态字段集验证的主题更好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读