2017-03-13 6 views
0

を与える:ちょうど私がアクセス私の新しい作成したフォームを持っているとき、私は次のエラーを持っているZF2でフォームを作成し、そのエラーに

namespace Album\Form; 

use Zend\Form\Form; 

class AlbumForm extends Form 
    { 
public function __construct($name = null) 
{ 
    // we want to ignore the name passed 
    parent::__construct('album'); 

    $this->add(array(
     'name' => 'id', 
     'type' => 'Hidden', 
    )); 
    $this->add(array(
     'name' => 'title', 
     'type' => 'Text', 
     'options' => array(
      'label' => 'Title', 
     ), 
    )); 
    $this->add(array(
     'name' => 'artist', 
     'type' => 'Text', 
     'options' => array(
      'label' => 'Artist', 
     ), 
    )); 
    $this->add(array(
     'name' => 'submit', 
     'type' => 'Submit', 
     'attributes' => array(
      'value' => 'Go', 
      'id' => 'submitbutton', 
     ), 
    )); 
} 
} 
:ここ

Zend\Form\Factory::create expects the $spec["type"] to implement one of Zend\Form\ElementInterface, Zend\Form\FieldsetInterface, or Zend\Form\FormInterface; received Hidden 

は私のAlbumForm.phpファイルです

そして、ここでフォームのモデルAlbum.phpコードです:ここ

// Add content to these methods: 
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'), 
      ), 
     )); 

     $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; 
} 

スタックトレースです:

#0 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\Form\Form.php(143): Zend\Form\Factory->create(Array) 
#1 C:\xampp\htdocs\zendtest\module\Album\src\Album\Form\AlbumForm.php(22): Zend\Form\Form->add(Array) 
#2 C:\xampp\htdocs\zendtest\module\Album\src\Album\Controller\AlbumController.php(41): Album\Form\AlbumForm->__construct() 
#3 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\Mvc\Controller\AbstractActionController.php(87): Album\Controller\AlbumController->addAction() 
#4 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent)) 
#5 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) 
#6 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\EventManager\EventManager.php(208): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#7 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\Mvc\Controller\AbstractController.php(108): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#8 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\Mvc\DispatchListener.php(113): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response)) 
#9 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent)) 
#10 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) 
#11 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\EventManager\EventManager.php(208): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#12 C:\xampp\htdocs\zendtest\vendor\ZF2\library\Zend\Mvc\Application.php(297): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) 
#13 C:\xampp\htdocs\zendtest\public\index.php(14): Zend\Mvc\Application->run() 
#14 {main} 

私は上記のエラーを解決してモジュールを正常に動作させることができました。 問題を調査するためにさらにコードが必要な場合はお知らせください。

+0

このエラーはAlbumFormから発生していますか?スタックトレースをチェックインします。隠された入力がなくてもフォームが機能するかどうかチェックしましたか? – SzymonM

+0

はい、私は隠しフィールドの削除を変更することでチェックしましたが、同じエラーが残っています。スタックトレースエラーで更新された質問を確認してください: – Shoaib

+0

どのバージョンのZendを使用しますか?古いバージョンのようです。コンポーザー経由でインストールした場合は、 '$ composer update'を実行してください。 – SzymonM

答えて

1

私はコメントの問題を修正しましたが、私は答えを投稿します。誰かが同様の問題を抱えていると役立つかもしれません。

まず、あなたのZendライブラリが最新のものかどうか確認してください。
もし問題がある特定の入力(コメント/一時的な削除)のみであるのか、グローバルな問題であるのかを確認してみてください。たぶん入力の型に入力ミスをしたことがあるかもしれません(Zendはおそらく型が存在しないという例外を投げます)。あなたは推奨されない情報を取得した場合

You are retrieving the service locator from within the class [...]

がそうコントローラでサービスロケータを使用して、将来のバージョンでのZendがgetServiceLocator()メソッドを削除します覚えておいてはお勧めしません。依存関係は、ファクトリクラスを通して注入する必要があります。

関連する問題