Zend Framework 2过滤/验证内容数组

3 php zend-framework2

如何将过滤器应用于具有数组内容的字段元素?

例如:

$this->add(
  "name" => "tags",
  "type" => "text",
  "filter" => array(
    array("name" => "StripTags"),
    array("name" => "StringTrim")
  )
);

$tags[0] = "PHP";
$tags[1] = "CSS";
Run Code Online (Sandbox Code Playgroud)

如果我尝试过滤我收到一个错误,说标量对象被排除,给出数组.

Adr*_*ian 9

目前这不太可能.您最好的选择是使用回调过滤器并单独过滤每个项目.像这样的东西

$this->add(
  "name" => "tags",
  "type" => "text",
  "filter" => array(
    array("name" => "Callback", "options" => array(
       "callback" => function($tags) {
          $strip = new \Zend\Filter\StripTags();
          $trim = new \Zend\Filter\StringTrim();
          foreach($tags as $key => $tag) {
            $tag = $strip->filter($tag);
            $tag = $trim->filter($tag);
            $tags[$key] = $tag;
          }
          return $tags;
    }))
  )
);
Run Code Online (Sandbox Code Playgroud)


pdi*_*izz 6

我意识到这是旧的,但你可以指定输入类型,ArrayInput并将InputFilter按预期处理它:

  "name" => "tags",
  "type" => "Zend\\InputFilter\\ArrayInput", // Treat this field as an array of inputs
  "filter" => array(
    array("name" => "StripTags"),
    array("name" => "StringTrim")
  )
Run Code Online (Sandbox Code Playgroud)