【问题标题】:Access the set data for logic in Laminas filter?访问层过滤器中逻辑的设置数据?
【发布时间】:2021-06-03 08:19:03
【问题描述】:

我正在使用 Mezzio/Laminas(Zend 的较新版本)并想检查 id 是否小于数字。如果不是,则需要另一个表单元素。是否可以以任何方式访问层过滤器中的设置数据?

【问题讨论】:

    标签: zend-framework mezzio laminas


    【解决方案1】:

    在您的输入过滤器类中,您可以覆盖 setData

    public function setData($data)
    {
        // your custom logic here
    
        return parent::setData($data);
    }
    

    在下面的示例中,我添加了一个示例,说明如何编辑已定义的输入或添加新的输入定义

    public function setData($data)
    {
        $type = array_key_exists('type', $data) ? $data['type'] : null;
    
        switch($type) {
            case 'CASE_ONE':
                $this->get('someAlreadyDefinedElement')->setRequired(false);
                $this->add([
                    'name'       => 'someOtherElement',
                    'required'   => true,
                    'validators' => [
                        [
                            'name'    => 'Date',
                            'options' => [
                                'format' => \DateTime::ISO8601,
                            ],
                        ],
                    ],
                ]);
            break;
            case 'SOME_OTHER_CASE':
               // some other logic
            break;
        }
    
        return parent::setData($data);
    }
    

    【讨论】:

    • 好的,这是一个开始,但是我现在如何使用过滤器中的数据呢?我想使用来自$data 的值来设置'required' 真或假。
    • 在您的 init 方法中,您应该拥有所有的元素声明,以及它们的所有过滤器和验证器,因此您可以获得定义的元素并根据输入数据编辑其要求。如果你必须添加一个新元素,你也可以这样做。我已经更新了答案
    猜你喜欢
    • 2012-08-30
    • 2012-07-06
    • 2012-11-26
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2016-06-28
    相关资源
    最近更新 更多