Comment ajouter un champ de saisie semi-automatique dans un formulaire Symfony2 pour la collecte et l'utilisation de Propulser?

Je suis à l'aide de Symfony 2.1 formes avec PropelBundle et je suis en train de revoir une forme qui avait une liste déroulante des objets (pour sélectionner) pour utiliser à la place un jquery autocomplete champ de travail (avec AJAX). Pour la liste déroulante, j'ai été en utilisant le code suivant (qui a fonctionné parfaitement pour le drop-down) dans mon formulaire type:

$builder->add('books', 'collection', array(
    'type'          => 'model',
    'options'       => array(
        'class'     => 'MyVendor\MyBundle\Model\Book',
        'property'  => 'title',
    ),
    'allow_add'     => true,
    'allow_delete'  => true,
    'by_reference'  => false,
    'required'      => false,
));

Pour le bien de donner un peu de contexte, disons que nous sommes en créant un nouveau "Lecteur" de l'objet et que nous voudrions pour sélectionner le Lecteur de livres préférés à partir d'une liste de "Réserver" des objets. Un type de collection est utilisé de sorte que de nombreux "livres préférés" peut être sélectionné dans le nouveau "Lecteur". Maintenant, je voudrais changer le ci-dessus pour utiliser la saisie semi-automatique. Pour ce faire, j'ai essayé de mettre en œuvre un Les données de transformation afin d'être en mesure d'obtenir un Livre-objet à partir d'un simple champ de texte qui pourrait être utilisé pour la fonction d'auto-complétion pour passer le Livre ID comme indiqué dans la réponse à cette Question. Cependant, je n'étais pas en mesure de comprendre comment faire les Données du Transformateur de travailler avec un type de collection et de Propulser cours. J'ai créé un BookToIdTransformer classe comme indiqué dans le Symfony livre de cuisine et j'ai essayé le suivant dans le "ReaderType" fichier:

$transformer = new BookToIdTransformer();
$builder->add(
        $builder->create('books', 'collection', array(
            'type'          => 'text',
            'allow_add'     => true,
            'allow_delete'  => true,
            'by_reference'  => false,
            'required'      => false,
        ))->addModelTransformer($transformer)
);

Ci-dessus, j'obtiens un "Call to undefined method: getId" l'exception " (apparemment le Transformateur s'attend à un PropelCollection de Livres, pas un seul Livre objet..). Personne ne sait comment s'y prendre? ou laissez-moi savoir si il ya d'autres façons de mettre en œuvre la saisie semi-automatique à l'aide de Symfony Propel et permettant la sélection de plusieurs objets (par exemple, une collection de livres)?

OriginalL'auteur RayOnAir | 2012-08-15