1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <?php # CONTROLLER METHOD /** * @Route("/", name="foobarIndex") */ public function indexAction(){ $repo = $this->getDoctrine()->getRepository('AcmeDemoBundle:Foo'); $form = $this->createForm(new \Acme\DemoBundle\Form\FooType($repo)); return array( 'form' => $form->createView() ); } # FORM TYPE class FooType extends AbstractType { /** * @var \Acme\DemoBundle\Entity\FooRepo */ private $repository; /** * We are going to pass entity repository object but might as well pass data only */ function __construct($repository) { $this->repository = $repository; // store it, we are going to use it later } public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('someChoiceField', 'choice', array( 'choices' => $this->repository->someFooMethod() # returns array() of Foo objects )); # Please make sure to form your array properly, # e.g. primary key => textual represenation, or at lease have __toString overriden } public function getName() { return 'acme_demobundle_footype'; } } ?> |
PD9waHAKICAgICMgQ09OVFJPTExFUiBNRVRIT0QKICAgIC8qKgogICAgICogQFJvdXRlKCIvIiwgbmFtZT0iZm9vYmFySW5kZXgiKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5kZXhBY3Rpb24oKXsKICAgICAgICAkcmVwbyA9ICR0aGlzLT5nZXREb2N0cmluZSgpLT5nZXRSZXBvc2l0b3J5KCdBY21lRGVtb0J1bmRsZTpGb28nKTsKCiAgICAgICAgJGZvcm0gPSAkdGhpcy0+Y3JlYXRlRm9ybShuZXcgXEFjbWVcRGVtb0J1bmRsZVxGb3JtXEZvb1R5cGUoJHJlcG8pKTsKCiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAnZm9ybScgPT4gJGZvcm0tPmNyZWF0ZVZpZXcoKQogICAgICAgICk7CiAgICB9CiAgICAKICAgICMgRk9STSBUWVBFCiAgICBjbGFzcyBGb29UeXBlIGV4dGVuZHMgQWJzdHJhY3RUeXBlCiAgICB7CiAgICAgICAgLyoqCiAgICAgICAgICogQHZhciBcQWNtZVxEZW1vQnVuZGxlXEVudGl0eVxGb29SZXBvCiAgICAgICAgICovCiAgICAgICAgcHJpdmF0ZSAkcmVwb3NpdG9yeTsKICAgIAogICAgICAgIC8qKgogICAgICAgICAqIFdlIGFyZSBnb2luZyB0byBwYXNzIGVudGl0eSByZXBvc2l0b3J5IG9iamVjdCBidXQgbWlnaHQgYXMgd2VsbCBwYXNzIGRhdGEgb25seQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyZXBvc2l0b3J5KQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPnJlcG9zaXRvcnkgPSAkcmVwb3NpdG9yeTsgLy8gc3RvcmUgaXQsIHdlIGFyZSBnb2luZyB0byB1c2UgaXQgbGF0ZXIKICAgICAgICB9CiAgICAKICAgICAgICBwdWJsaWMgZnVuY3Rpb24gYnVpbGRGb3JtKEZvcm1CdWlsZGVySW50ZXJmYWNlICRidWlsZGVyLCBhcnJheSAkb3B0aW9ucykKICAgICAgICB7CiAgICAgICAgICAgICRidWlsZGVyCiAgICAgICAgICAgICAgICAtPmFkZCgnc29tZUNob2ljZUZpZWxkJywgJ2Nob2ljZScsIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdjaG9pY2VzJyA9PiAkdGhpcy0+cmVwb3NpdG9yeS0+c29tZUZvb01ldGhvZCgpICMgcmV0dXJucyBhcnJheSgpIG9mIEZvbyBvYmplY3RzCiAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAjIFBsZWFzZSBtYWtlIHN1cmUgdG8gZm9ybSB5b3VyIGFycmF5IHByb3Blcmx5LCAKICAgICAgICAgICAgIyBlLmcuIHByaW1hcnkga2V5ID0+IHRleHR1YWwgcmVwcmVzZW5hdGlvbiwgb3IgYXQgbGVhc2UgaGF2ZSBfX3RvU3RyaW5nIG92ZXJyaWRlbgogICAgICAgIH0KICAgIAogICAgICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAnYWNtZV9kZW1vYnVuZGxlX2Zvb3R5cGUnOwogICAgICAgIH0KICAgIH0gICAgCj8+


