用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命令?