<?php
# CONTROLLER METHOD
/**
* @Route("/", name="foobarIndex")
*/
public function indexAction(){
$repo = $this->getDoctrine()->getRepository('AcmeDemoBundle:Foo');
$form = $this->createForm(new \Acme\DemoBundle\Form\FooType($repo));
'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+