2016-10-29 23 views
0

次のエラーを修正してください。私はZend Framework documentationに従っています。PHP 7 Zend Framework 2.4 InputFilter

致命的なエラー:

Cannot use 'Int' as class name as it is reserved in E:\Working\PHP\Zend-Framework\Zend-Framework-2\zf2-stable\vendor\zendframework\zendframework\library\Zend\Filter\Int.php on line 12 

エラー:

array('name' => 'Int'), ## Fatal error 
array('name' => 'ToInt') ## Zend\Filter\FilterPluginManager::get was unable to fetch or create an instance for Zend\Filter\ToInt 
array('name' => 'StringTrim') ## Works Only for Edit and Delete, however Not for Add 

環境:

$ php --version 
PHP 7.0.9 (cli) (built: Jul 20 2016 11:08:23) (ZTS) 
Copyright (c) 1997-2016 The PHP Group 
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies 

$ composer --version 
Composer version 1.2.1 2016-09-12 11:27:19 

$ composer show 
zendframework/zendframework 2.3.3 Zend Framework 2 
zendframework/zendxml  1.0.2 Utility library for XML usage, best practices, and security in PHP 

ZF2-チュートリアル/モジュール/アルバム/ SRC /アルバム/モデル/ Album.php

<?php 

namespace Album\Model; 

use Zend\InputFilter\InputFilter; 
use Zend\InputFilter\InputFilterAwareInterface; 
use Zend\InputFilter\InputFilterInterface; 

class Album implements InputFilterAwareInterface 
{ 
    public $id; 
    public $artist; 
    public $title; 
    protected $inputFilter; 

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

    public function getArrayCopy() 
    { 
     return get_object_vars($this); 
    } 

    public function setInputFilter(InputFilterInterface $inputFilter) 
    { 
     throw new \Exception("Not used"); 
    } 

    public function getInputFilter() 
    { 
     if (!$this->inputFilter) { 
      $inputFilter = new InputFilter(); 

      $inputFilter->add(array(
       'name'  => 'id', 
       'required' => true, 
       'filters' => array(
        array('name' => 'Int'), ## Fatal error 
       ), 
      )); 

      $inputFilter->add(array(
       'name'  => 'artist', 
       'required' => true, 
       'filters' => array(
        array('name' => 'StripTags'), 
        array('name' => 'StringTrim'), 
       ), 
       'validators' => array(
        array(
         'name' => 'StringLength', 
         'options' => array(
          'encoding' => 'UTF-8', 
          'min'  => 1, 
          'max'  => 100, 
         ), 
        ), 
       ), 
      )); 

      $inputFilter->add(array(
       'name'  => 'title', 
       'required' => true, 
       'filters' => array(
        array('name' => 'StripTags'), 
        array('name' => 'StringTrim'), 
       ), 
       'validators' => array(
        array(
         'name' => 'StringLength', 
         'options' => array(
          'encoding' => 'UTF-8', 
          'min'  => 1, 
          'max'  => 100, 
         ), 
        ), 
       ), 
      )); 

      $this->inputFilter = $inputFilter; 
     } 

     return $this->inputFilter; 
    } 
} 

ZF2-チュートリアル/モジュール/アルバム/ビュー/アルバム/アルバム/ add.phtml

<?php 

// module/Album/view/album/album/add.phtml: 

$title = 'Add new album'; 
$this->headTitle($title); 
?> 
<h1><?php echo $this->escapeHtml($title); ?></h1> 
<?php 
$form->setAttribute('action', $this->url('album', array('action' => 'add'))); 
$form->prepare(); 

echo $this->form()->openTag($form); 
echo $this->formHidden($form->get('id')); 
echo $this->formRow($form->get('title')); 
echo $this->formRow($form->get('artist')); 
echo $this->formSubmit($form->get('submit')); 
echo $this->form()->closeTag(); 

編集

パブリック関数getInputFilterに次の行をコメントアウト()動作します:

 /* 
     $inputFilter->add(array(
      'name'  => 'id', 
      'required' => true, 
      'filters' => array(
       array('name' => 'Int'), 
      ), 
     )); 
     */ 

ありがとうございます。

+0

StackOverflowは質問と回答のフォーラムです。あなたの質問は何ですか? http://stackoverflow.com/help/how-to-ask – jacefarm

答えて

1

Intフィルタではなく、このバージョンでIsIntフィルタを使用してください。

Zend\I18n\Validator\IsInt 
+0

試した$ validator =新しいZend \ I18n \ Validator \ IsInt(); 致命的なエラー:キャッチエラー:クラス 'Album \ Controller \ Zend \ I18n \ Validator \ IsInt'が見つかりません。 – Impavid

+0

try \ Zend \ I18n \ Validator \ IsInt - スラッシュを追加していない場合、iotは試しています。現在の名前空間で見つける:) – Andrew