使用 PHP 7 调用 Zend Filter ToInt 时出错

Error calling Zend Filter ToInt with PHP 7

我有以下型号class:

<?php
namespace Tropa\Model;

use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;

class Setor
{
    public $codigo;
    public $nome;
    protected $inputFilter;

    public function exchangeArray($data)
    {
        $this->codigo = (isset($data['codigo'])) ? $data['codigo'] : null;
        $this->nome = (isset($data['nome'])) ? $data['nome'] : null;
    }

    public function getInputFilter()
    {
        if (!$this->inputFilter) {
            $inputFilter = new InputFilter();
            $factory = new InputFactory();
            $inputFilter->add($factory->createInput(array(
                'name' => 'codigo',
                'required' => false,
                'filters' => array(
                    array('name' => 'ToInt'), ## It was Int, but in PHP 7 it not works anymore, so I replaced it as suggest the zend documentation https://framework.zend.com/apidoc/2.4/classes/Zend.Filter.Int.html
                ),
                'validators' => array(
                    array(
                        'name' => 'Between',
                        'options' => array(
                            'min' => 0,
                            'max' => 3600
                        )
                    ),
                ),
            )));
            $inputFilter->add($factory->createInput(array(
                'name' => 'nome',
                'required' => true,
                'filters' => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name' => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min' => 2,
                            'max' => 30,
                        )
                    )
                ),
            )));
            $this->inputFilter = $inputFilter;
        }

        return $this->inputFilter;
    }
}

当我 运行 这个 class 我收到消息:

Zend\Filter\FilterPluginManager::get was unable to fetch or create an instance for ToInt

既然 PHP 7 保留了 Int 这个词,有人知道如何验证整数吗?

已添加:

安装 zendframework/zend-filter 版本 2.7.1 后,错误消息已更改为:

Fatal error: Uncaught TypeError: Argument 1 passed to Zend\ServiceManager\AbstractPluginManager::__construct() must implement interface Zend\ServiceManager\ConfigInterface, instance of Zend\ServiceManager\ServiceManager given, called in C:\xampp\htdocs\corps\vendor\zendframework\zend-filter\src\FilterChain.php on line 112 and defined in C:\xampp\htdocs\corps\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php:60 Stack trace: #0 C:\xampp\htdocs\corps\vendor\zendframework\zend-filter\src\FilterChain.php(112): Zend\ServiceManager\AbstractPluginManager->__construct(Object(Zend\ServiceManager\ServiceManager)) #1 C:\xampp\htdocs\corps\vendor\zendframework\zend-filter\src\FilterChain.php(183): Zend\Filter\FilterChain->getPluginManager() #2 C:\xampp\htdocs\corps\vendor\zendframework\zendframework\library\Zend\InputFilter\Factory.php(358): Zend\Filter\FilterChain->attachByName('\Zend\Filter\To...', NULL, 1000) #3 C:\xampp\htdocs\corps\vendor\zendframework\zendframework\library\Zend\InputFilt in C:\xampp\htdocs\corps\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php on line 60

你好像安装了 zend-filter 2.3?我认为您应该开始将所有 Zend Framework 包升级到至少 2.4 版本。 zend-filter 2.3 不包含 ToInt 过滤器,但 2.4 包含。两个版本都包含 Int 过滤器,但在 2.4 中它仅用作 link 到 ToInt 并另外生成错误消息(查看 Int class source in 2.4)。