1

Zend Framework 2.1 (2.0x ではない) メソッドを使用して、次のリンクで説明されている選択/ドロップダウンを設定しました。

彼らが言ったように私はやったようですが、次のようなエラーメッセージが表示されました:

*... ::__construct() は Zend\Db\TableGateway\TableGateway のインスタンスでなければなりません。何も指定せず、...* で呼び出します。

サービスロケーターが適切に使用されていないようです。

私の FieldSet を追加する私のフォームコードSupplierFieldset:

namespace Inventory\Form;
use Zend\Form\Form;
use Inventory\Model;

class ItemForm extends Form
{
    public function init()
    {
        $this->add(array(
                'name' => 'sup_code',
                'type' => 'Inventory\Form\SupplierFieldset'
        ));
    }
}

私の「SupplierFieldset」クラス:

namespace Inventory\Form;

use Inventory\Model;
use Zend\Form\Element;
use Zend\Form\Fieldset;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\InputFilter\InputFilterProviderInterface;

use Inventory\Model\SupplierTable;
use Inventory\Model\Supplier;

class SupplierFieldset extends Fieldset implements ServiceLocatorAwareInterface
{
    protected $serviceLocator;
    protected $supplierTable;

    public function init()
    {
        parent::__construct('Suppliers Code');
        $this->setLabel('Supplier Code');
        $this->setName('supplier_code');
        $suppliers = $this->getSupplierTable()->fetchAll();

       $select = new Element\Select('supplier_code');
        $options = array();
        foreach ($suppliers as $supplier) {
            $options[$supplier->id] = $supplier->sup_code;
        }
        $select->setValueOptions($options);
    }

    public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
    {
        $this->serviceLocator = $serviceLocator;
    }

    public function getServiceLocator()
    {
        return $this->serviceLocator;
    }

    public function getSupplierTable()
    {
        if (!$this->supplierTable) {
            $sm = $this->getServiceLocator();
            $this->supplierTable = $sm->get('Inventory\Model\SupplierTable');
        }
        return $this->supplierTable;
    }
}

私の Module.php getFormElementConfig() 関数:

public function getFormElementConfig()
    {
        return array(
            'factories' => array(
                'SupplierFieldset' => function($sm) {
                    $serviceLocator = $sm->getServiceLocator();
                    $supplierTable = $serviceLocator->get('Inventory\Model\SupplierTable');
                    $fieldset = new SupplierFieldset($supplierTable);
                    return $fieldset;
                 }
            )
        );
    }

私の SupplierTable.php モデル:

namespace Inventory\Model;

use Zend\Db\TableGateway\TableGateway;

class SupplierTable
{
    protected $tableGateway;

    public function __construct(TableGateway $tableGateway)
    {
        $this->tableGateway = $tableGateway;
    }

    public function fetchAll()
    {
        $resultSet = $this->tableGateway->select();
        return $resultSet;
    }
}

SupplierTableモデルのコンストラクターにはパラメーターが必要であることはわかっていTableGateway $tableGatewayます。しかし、このモデルは から呼び出されると正しく動作しますSupplierController

4

0 に答える 0