从zf2表单的其他表中选择元素

i have 2 table with ManyToOne relation on the database between client and sale and i want to select the id_client on the Sale Form . for that o used that .

SaleForm :

public function __construct(ClientTable $table)
    {
        parent::__construct('vente');

        $this->setAttribute('method', 'post');
        $this->clientTable = $table;     
        $this->add(array(
            'name' => 'id',
            'attributes' => array(
                'type'  => 'hidden',
            ),
        ));
        $this->add(
                array(
                    'name' => 'id_client',
                    'type' => 'Select',
                    'attributes' => array(
                        'id'    => 'id_client'
                    ),
                    'options' => array(
                        'label' => 'Catégory',
                        'value_options' => $this->getClientOptions(),
                        'empty_option'  => '--- Sélectionnez une categorie---'
                    ),
                )
            );
         public function getClientOptions()
        {
            $data  = $this->clientTable->fetchAll()->toArray();
            $selectData = array();

            foreach ($data as $key => $selectOption) {
                $selectData[$selectOption["id"]] = $selectOption["nom_client"];
            }

            return $selectData;
        }
}

SaleController:

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Caisse\Model\Sale;          
use Caisse\Form\SaleForm; 

class SaleController extends AbstractActionController
{
    protected $saleTable;
    protected $clientTable;

    public function addAction()
    {
        $form = new SaleForm($this->clientTable);
        $form->get('submit')->setValue('Ajouter');

        $request = $this->getRequest();
        if ($request->isPost()) {
            $vente = new Sale();
            $form->setInputFilter($sale->getInputFilter());
            $form->setData($request->getPost());

            if ($form->isValid()) {
                $vente->exchangeArray($form->getData());
                $this->getSaleTable()->saveSale($sale);


                return $this->redirect()->toRoute('sale');
            }
        }
        return array('form' => $form);

    }
}

But every Time i had this issue:

Catchable fatal error: Argument 1 passed to Caisse\Form\SaleForm::__construct() must be an instance of Admin\Model\ClientTable, null given.

Is this the good method to do it, any reference for same example will be welcome.

Thank you

Inside your controller, function addAction, you never set the variable clientTable maybe you forgot to initialize it.

Like this

public function addAction()
{
    $this->clientTable = $this->getServiceLocator()->get('Client\Model\ClientTable');
    $form = new SaleForm($this->clientTable);
    // ...
}

About

    public function getClientOptions()
    {
        $data  = $this->clientTable->fetchAll();
        $selectData = array();

        foreach ($data as $row) {
            $selectData[$row->id] = $row->nom_client;
        }

        return $selectData;
    }