So, im trying to embed one form in another without creating a class for the forms. Heres what ive got
$form = $this
->buildForm('UserAlert', $alert)
->add('Alert', 'entity', array('class' => 'Blah\MgmtBundle\Entity\Alert', 'property' => 'name', 'required' => true))
->add('Site', 'entity', array('class' => 'Blah\MgmtBundle\Entity\Site', 'property' => 'name', 'required' => false))
->add('Keyword', 'entity', array('class' => 'Blah\MgmtBundle\Entity\Keyword', 'property' => 'name', 'required' => false))
->add('Variant', 'entity', array('class' => 'Blah\MgmtBundle\Entity\Variant', 'property' => 'name', 'required' => false))
->add('Name', 'text');
$uac = $alert->getUserAlertConfig();
$subform = $this
->buildForm('UserAlertConfig', $uac)
->add('EmailAlert', 'choice', array('choices' => array('1' => 'Yes', '0' => 'No'), 'required' => true, 'label' => 'Email Alerts'))
->add('EmailHours', 'text', array('required' => false, 'label' => 'Email Alert Hours'))
->add('TextAlert', 'choice', array('choices' => array('1' => 'Yes', '0' => 'No'), 'required' => true, 'label' => 'Text Alerts'))
->add('TextHours', 'text', array('required' => false, 'label' => 'Text Alert Hours'));
$form->add($subform);
$form = $form->getForm();
however, on the getForm()
function, its saying
Neither property "form" nor method "getForm()" nor method "isForm()" exists in class "Blah\MgmtBundle\Entity\UserAlert"
anyone have any idea how im supposed to get this to work using the quickloading stuff?
heres buildForm
public function buildForm($model = '', $data)
{
if (empty($model)) {
throw new \Exception("Must define a model");
}
return $this->get('form.factory')->createBuilder('form', $data, array('data_class' => "\\Blah\\MgmtBundle\\Entity\\$model"));
}
Stack Trace
in /mnt/www/reporting/vendor/symfony/src/Symfony/Component/Form/Util/PropertyPath.php at line 314
at PropertyPath ->readProperty (object(UserAlert), '0')
in /mnt/www/reporting/vendor/symfony/src/Symfony/Component/Form/Util/PropertyPath.php at line 191
at PropertyPath ->getValue (object(UserAlert))
in /mnt/www/reporting/vendor/symfony/src/Symfony/Component/Form/Extension/Core/DataMapper/PropertyPathMapper.php at line 64
at PropertyPathMapper ->mapDataToForm (object(UserAlert), object(Form))
in /mnt/www/reporting/vendor/symfony/src/Symfony/Component/Form/Extension/Core/DataMapper/PropertyPathMapper.php at line 55
at PropertyPathMapper ->mapDataToForms (object(UserAlert), array('_token' => object(Form), 'Alert' => object(Form), 'Site' => object(Form), 'Keyword' => object(Form), 'Variant' => object(Form), 'Name' => object(Form), 'form' => object(Form)))
in /mnt/www/reporting/vendor/symfony/src/Symfony/Component/Form/Form.php at line 404
at Form ->setData (object(UserAlert))
in /mnt/www/reporting/vendor/symfony/src/Symfony/Component/Form/FormBuilder.php at line 659
at FormBuilder ->getForm ()
in /mnt/www/reporting/src/Blah/MgmtBundle/Controller/AlertController.php at line 96
at AlertController ->editAction ('1')
in at line
at call_user_func_array (array(object(AlertController), 'editAction'), array('1'))
in kernel.root_dir/bootstrap.php.cache at line 438
at HttpKernel ->handleRaw (object(Request), '1')
in kernel.root_dir/bootstrap.php.cache at line 416
at HttpKernel ->handle (object(Request), '1', true)
in /mnt/www/reporting/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/HttpKernel.php at line 44
at HttpKernel ->handle (object(Request), '1', true)
in kernel.root_dir/bootstrap.php.cache at line 612
at Kernel ->handle (object(Request))
in /mnt/www/reporting/web/app_dev.php at line 12
Ended up creating an interface for the subform and adding it like this
$form = $this
->buildForm('UserAlert', $alert)
->add('Alert', 'entity', array('class' => 'Neokeo\MgmtBundle\Entity\Alert', 'property' => 'name', 'required' => true))
->add('Site', 'entity', array('class' => 'Neokeo\MgmtBundle\Entity\Site', 'property' => 'name', 'required' => false))
->add('Keyword', 'entity', array('class' => 'Neokeo\MgmtBundle\Entity\Keyword', 'property' => 'name', 'required' => false))
->add('Variant', 'entity', array('class' => 'Neokeo\MgmtBundle\Entity\Variant', 'property' => 'name', 'required' => false))
->add('Name', 'text');
$uac = $alert->getUserAlertConfig();
$subform = $this->buildForm('UserAlertConfig', $uac, new \Neokeo\MgmtBundle\Form\UserAlertConfig)
->add('EmailAlert', 'choice', array('choices' => array('0' => 'No', '1' => 'Yes'), 'required' => true, 'label' => 'Email Alerts'))
->add('TextAlert', 'choice', array('choices' => array('0' => 'No', '1' => 'Yes'), 'required' => true, 'label' => 'Text Alerts'));
$form->add($subform, '', array('label' => ''));
$form = $form->getForm();
if anyone can find an easier way without creating interfaces, let me know
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With