使用 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)。
我有以下型号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)。