У меня есть таблица с отношением ManyToOne к базе данных между клиентом и продавцом, и я хочу выбрать id_client
в форме продажи. для этого o использовал это.Выберите элемент из другой таблицы на форме zf2
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);
}
}
Но каждый раз, когда я имел этот вопрос:
Catchable fatal error: Argument 1 passed to Caisse\Form\SaleForm::__construct() must be an instance of Admin\Model\ClientTable, null given.
Является ли это хороший способ сделать это, любая ссылка на тот же пример будет приветствоваться.
Спасибо
спасибо, это глупо забывать, что, но теперь у меня есть эта ошибка, когда я пытаюсь вставить в базу данных {{Ряды как часть этого DataSource, с объектом типа нельзя передать в массив}}, и они ссылаются на эту строку $ data = $ this-> clientTable-> fetchAll() -> toArray(); – Loouu
Я сделал редактирование о методе ** toArray() **, вы можете попробовать, как указано выше. –
Большое спасибо Реми, я просто использую его :)) – Loouu