ZF2使用FilterProviderInterface来过滤类方法

时间:2013-05-08 11:28:15

标签: filter zend-framework2 class-method

我有一个模型类女巫基本上是带有getter和setter的数据库表中的字段。

class RealEstate extends BaseModel implements FilterProviderInterface
{    
    public $cityId;
    public $stateId;
    ...
    public $transferFields = array();

    public function getFilter()
    {
        return new MethodMatchFilter('getTransferFields');
    }

    public function setTransferFields($transferFields)
    {
        $this->transferFields = $transferFields;
    }

    public function getTransferFields()
    {
        return $this->transferFields;
    }
    ...
}

在我的BaseTableGateway类中,我有一个方法save,它接受这个模型对象并使用get方法将数据提取到数组中。

    $hydrator = new ClassMethods(false);
    $model_data = $hydrator->extract($model);

我需要getTransferFields()方法将对象绑定到我的表单,但我不需要它在最终数组中(在提取时被排除)。

public function getFilter()
{
    return new MethodMatchFilter('getTransferFields');
}

这种方法完全符合我的要求,但仅适用于1种方法。我无法找到如何过滤多个方法。有谁知道如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

只需返回FilterComposite个对象即可。 FilterComposite实现FilterInterface,其处理方式与MethodMatchFilter相同。

例如:

    public function getFilter()
    {
         $myFilters = new FilterComposite();
         $myFilters->addFilter('someParam', new MethodMatchFilter('getSomeParam'));
         $myFilters->addFilter('someOtherParam', new MethodMatchFilter('getSomeOtherParam'));
         return $myFilters;
    }