Je ne suis pas certain d'avoir bien cerné ton problème, mais comme le dit ROADSTER31,
ROADSTER31 wrote:Pour "choice", tu dois donner toutes les valeurs possibles au préalable, dans buildForm()
protected function buildForm()
{
$productList = array();
foreach (ProductQuery::create()->filterByVirtual(1)->find() as $product) {
$productList[$product->getId()] = $product->getId() . '::' . $product->getRef();
}
$Translator = Translator::getInstance();
$this->formBuilder
->add('id', 'hidden', [
'required' => true
])
->add('product_id', 'choice', [
'choices' => $productList,
'label' => 'Produit',
'label_attr' => ['for' => 'prodtype_product_id'],
'required' => true
])
->add('code', 'choice', [
'choices' => Resa::getProduitCodes(),
'label' => 'Code',
'label_attr' => ['for'=>'prodtype_type'],
'required' => true
])
;
}
Après il semblerai que tu souhaites limiter cette liste suivant un choix fait de ce même formulaire, dans ce cas il faut que tu rajoutes une contrainte "callback" (
->add('product_id', 'choice', [
'choices' => $productList,
'constraints' => array(
new Constraints\Callback(array("methods" => array(array($this, "verifyThis"))))
),
'label' => 'Produit',
'label_attr' => ['for' => 'prodtype_product_id'],
'required' => true
])
et avec cette fonction tu vas créer, tu vas pouvoir récupérer les autres champs, faire des requêtes...
Regarde le form "CustomerCreation", il a 2 callback dont "verifyEmailField"