J'ai une définition de formulaire qui utilise le type La partie triste est, je dois afficher une valeur par défaut Mon approche jusqu'à présent consistait à mettre en place un type de champ personnalisé qui s'étend sur La définition de champ: p> Le type de formulaire Définition: p > code>. Avec l'option
Query_Builder code> i Sélectionnez mes valeurs et que les valeurs sont affichées.
null code>, comme
tout code> (c'est un formulaire de filtre). Je n'aime pas les choix code> option code> d'entité code> parce que j'ai des valeurs de base de données et un
formelype code> ne doit pas interroger la base de données. P>
entité code> et ajoute une entrée null en haut de la liste. Le type de champ est chargé et utilisé mais malheureusement, la valeur nominale n'est pas affichée. P>
class FirstNullEntityType extends AbstractType
{
/**
* @var unknown
*/
private $doctrine;
public function __construct(ContainerInterface $container)
{
$this->doctrine = $container->get('doctrine');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired('query_builder');
$resolver->setRequired('class');
}
public function buildView(FormView $view, FormInterface $form, array $options)
{
$class = $options['class'];
$repo = $this->doctrine->getRepository($class);
$builder = $options['query_builder']($repo);
$entities = $builder->getQuery()->execute();
// add dummy entry to start of array
if($entities) {
$dummy = new \stdClass();
$dummy->__toString = function() {
return '';
};
array_unshift($entities, $dummy);
}
$options['choices'] = $entities;
}
public function getName()
{
return 'first_null_entity';
}
public function getParent()
{
return 'entity';
}
}
3 Réponses :
Une autre approche serait d'utiliser un liste de choix kbd> p> service de liste de choix (YAML) kbd> p> type de formulaire personnalisé kbd> p> type de formulaire personnalisé service (YAML) kbd> p> < Pré> xxx pré> dans votre formulaire kbd> p> Choicelist code> avec des choix générés à partir de la base de données, puis utilisez-le dans un type de formulaire de choix personnalisé qui permettra un
vide_value code> .
Merci pour votre grande réponse. De cette façon, je dois enregistrer les deux machinechoiceliste code> et
firstNullentityType code> en tant que service et devez transmettre la liste sur le type, n'est-ce pas?
Oui, c'est correct. J'ai mis à jour mes réponses avec les versions YAML de ces services.
Merci de votre aide. J'ai fini par construire le choticelist code> directement dans le type de champ, car il apparaît plus flexible pour moi. La clé était d'étendre le champ code> code> comme vous l'avez suggéré.
Qu'est-ce qui flotte de votre bateau, homme. Heureux d'avoir aidé un peu.
AVIS: Empty_Value B> est remplacé dans Symfony V2.6 avec un espace réservé B>, pour tous les champs de choix ( Symfony.com/doc/2.6/Reference/Forms/TTTYPES/... )
C'est beaucoup de code pour ce qui devrait être un drapeau unique sur l'entitéype :(
Essayez cette réponse: Stackoverflow.com/questions/ 47553427 / ...
Vous pouvez utiliser un espace réservé à partir de 2,6 p>
L'espace réservé ne semble pas fonctionner avec Query_Builder Code>
Voici ce qui fonctionne dans Symfony 3.0.3
Utilisez Symfony \ Bridge \ Doctrine \ Form \ Type \ EntityTpe; Code> P>
$builder->add('example' EntityType::class, array(
'label' => 'Example',
'class' => 'AppBundle:Example',
'placeholder' => 'Please choose',
'empty_data' => null,
'required' => false
));
Soyez conscient vide_data => null code> ne fonctionnera pas avec ChoceType
Réglage de l'espace réservé à une chaîne vide comme ceci: '"espace porteur" =>' ' code> fonctionne bien.
Vous pouvez utiliser $ choix [''] = 'TOUS'; Dans votre définition de type de formulaire