用PHP7调用Zend Filter ToInt时出错

用PHP7调用Zend Filter ToInt时出错,php,zend-framework,filter,zend-framework2,php-7,Php,Zend Framework,Filter,Zend Framework2,Php 7,我有以下模型类: <?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;

我有以下模型类:

<?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;
    }
}
当我运行该类时,我会收到以下消息:

Zend\Filter\FilterPluginManager::get无法获取或创建 托因实例

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

增加:

安装zendframework/zend筛选器版本2.7.1后,错误消息已更改为:

致命错误:未捕获的TypeError:参数1传递给 Zend\ServiceManager\AbstractPluginManager::\uu构造必须 实现接口Zend\ServiceManager\ConfigInterface,的实例 Zend\ServiceManager\ServiceManager已给定,已调用 C:\xampp\htdocs\corps\vendor\zendframework\zend filter\src\FilterChain.php 第112行,并在中定义 C:\xampp\htdocs\corps\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php:60 堆栈跟踪:0 C:\xampp\htdocs\corps\vendor\zendframework\zend filter\src\FilterChain.php112: Zend\ServiceManager\AbstractPluginManager->\uu ConstructionObjectZend\ServiceManager\ServiceManager 1 C:\xampp\htdocs\corps\vendor\zendframework\Zend filter\src\FilterChain.php183: Zend\Filter\FilterChain->getPluginManager 2 C:\xampp\htdocs\corps\vendor\zendframework\zendframework\library\Zend\InputFilter\Factory.php358: Zend\Filter\FilterChain->attachByName'\Zend\Filter\To…',NULL, 1000 3 C:\xampp\htdocs\corps\vendor\zendframework\zendframework\library\Zend\InputFilt 在里面 C:\xampp\htdocs\corps\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php 在线60


你好像已经安装了zend filter 2.3?我认为您应该开始将所有Zend Framework软件包升级到至少2.4版本。zend filter 2.3不包含ToInt筛选器,但2.4包含。这两个版本都包含Int-filter,但在2.4中,它仅用作指向ToInt的链接,并另外生成一条错误消息。请查看。

您安装了哪个版本的?运行composer show zendframework/zend filter。我运行了命令并获得消息包zendframework/zend filter not found当问题首次出现时?也许你不知怎么把这个包裹拿走了?另一方面,FilterPluginManager也属于此软件包,如果未安装,它将不会给您一个错误。我在阅读一本书,但这本书是在php 7发布之前编写的,因此以前的Int过滤器没有问题。删除此过滤器时它能工作吗?能否尝试用\Zend\Filter\ToInt::class替换“ToInt”?composer是否显示任何与筛选器/验证器相关的输出包?哪些版本?是否从项目的根目录运行composer命令?