Related
I get passed an array in a callback function. Now I want access a value of this array.
I can dump this array into a file with var_export($fields[1], True)
Here is the content of the export:
helper_plugin_bureaucracy_fieldtextbox::__set_state(array(
'mandatory_args' => 2,
'opt' =>
array (
'cmd' => 'textbox',
'label' => 'Kunde',
'display' => 'Kunde',
'value' => 'myimportantdata',
),
'tpl' =>
array (
'_elem' => 'textfield',
'_text' => '##DISPLAY##',
'_class' => '##CLASS##',
'id' => '##ID##',
'name' => '##NAME##',
'value' => '##VALUE##',
'class' => 'edit required',
'required' => 'required',
),
'checks' =>
array (
),
'hidden' => false,
'error' => false,
'checktypes' =>
array (
'/' => 'match',
'<' => 'max',
'>' => 'min',
),
))
I want to access the value of opt->value whitch is 'myimportantdata' in this case.
How can I achieve this?
I already tried:
$mydata = $fields[1]['helper_plugin_bureaucracy_fieldtextbox']['opt'];
$mydata = $fields[1][0][2];
$mydata = $fields[1]->helper_plugin_bureaucracy_fieldtextbox['opt'];
without success :-(
fields[1] contains an object of the type 'helper_plugin_bureaucracy_fieldtextbox'. The access to the properties of the object such as 'opt' must be done with the -> operator.
$opt = $fields[1]->opt;
$opt_value = $fields[1]->opt['value']; //myimportantdata
$data = array(
'mandatory_args' => 2,
'opt' =>
array (
'cmd' => 'textbox',
'label' => 'Kunde',
'display' => 'Kunde',
'value' => 'myimportantdata',
),
'tpl' =>
array (
'_elem' => 'textfield',
'_text' => '##DISPLAY##',
'_class' => '##CLASS##',
'id' => '##ID##',
'name' => '##NAME##',
'value' => '##VALUE##',
'class' => 'edit required',
'required' => 'required',
),
'checks' =>
array (
),
'hidden' => false,
'error' => false,
'checktypes' =>
array (
'/' => 'match',
'<' => 'max',
'>' => 'min',
),
);
echo $data["opt"]["value"];
I'm trying to create a form that contains a collection of fieldsets using only array specs and Zend\Form\Factory.
Here is how I create the form using the factory:
$factory = new Zend\Form\Factory();
$fieldset = $factory->createFieldset(array(
'elements' => array(
array(
'spec' => array(
'name' => 'name',
'type' => 'Text',
'attributes' => array(
'class' => 'form-control input-sm',
),
'options' => array(
'label' => 'Name',
),
),
),
array(
'spec' => array(
'name' => 'driverClass',
'type' => 'Text',
'attributes' => array(
'class' => 'form-control input-sm',
),
'options' => array(
'label' => 'Driver',
),
),
),
),
'input_filter' => array(
'name' => array(
'required' => true,
),
),
));
$form = $factory->createForm(array(
'name' => 'application-form',
'attributes' => array(
'role' => 'form',
),
'elements' => array(
array(
'spec' => array(
'type' => 'Collection',
'name' => 'connection',
'options' => array(
'label' => 'Connections',
'allow_add' => true,
'allow_remove' => true,
'should_create_template' => true,
'count' => 2,
'target_element' => $fieldset,
),
),
),
array(
'spec' => array(
'name' => 'security',
'type' => 'Csrf',
'attributes' => array(
'required' => 'required',
),
),
),
array(
'spec' => array(
'name' => 'submit',
'type' => 'Submit',
'attributes' => array(
'class' => 'btn btn-sm btn-primary',
),
'options' => array(
'label' => 'Apply',
),
),
),
),
));
The resulting form works fine when I try to set data and render form elements. But when I validate it and retrieve data, like so (in a controller):
$form->setData($this->getRequest()->getPost());
if ($form->isValid() === true) {
$data = $form->getData();
var_dump($this->getRequest()->getPost());
var_dump($data);
}
With this set of data as POST:
object(Zend\Stdlib\Parameters)[141]
private 'storage' (ArrayObject) =>
array (size=3)
'connection' =>
array (size=2)
0 =>
array (size=2)
'name' => string 'orm_default' (length=11)
'driverClass' => string 'Doctrine\DBAL\Driver\PDOMySql\Driver' (length=36)
1 =>
array (size=2)
'name' => string 'blog' (length=4)
'driverClass' => string 'Doctrine\DBAL\Driver\PDOMySql\Driver' (length=36)
'submit' => string '' (length=0)
'security' => string '20d5c146d8874dc804948e962d5de91b-87c9e4097f9140d259efb5c589a05d6b' (length=65)
The array returned by the call to $form->getData() shows an empty collection:
array (size=3)
'security' => string '20d5c146d8874dc804948e962d5de91b-87c9e4097f9140d259efb5c589a05d6b' (length=65)
'submit' => string '' (length=0)
'connection' =>
array (size=0)
empty
What am I missing?
The expected result is a collection, named 'connection' in this example, containing two arrays representing the two fieldsets as specified by the POST data. I have a feeling this has to do with a missing InputFilter (or at least its specs) because I have managed to obtain the expected result when I implement a fieldset class that extends Zend\Form\Fieldset and implements Zend\InputFilter\InputFilterProviderInterface.
Just discovered this class Zend\Form\InputFilterProviderFieldset which does exactly what I missed.
I added a type in the fieldset specs and changed the input filter specs (which is mandatory) like so:
$fieldset = $factory->createFieldset(array(
'type' => 'Zend\Form\InputFilterProviderFieldset',
'elements' => array(
array(
'spec' => array(
'name' => 'name',
'type' => 'Text',
'attributes' => array(
'class' => 'form-control input-sm',
),
'options' => array(
'label' => 'Name',
),
),
),
array(
'spec' => array(
'name' => 'driverClass',
'type' => 'Text',
'attributes' => array(
'class' => 'form-control input-sm',
),
'options' => array(
'label' => 'Driver',
),
),
),
),
'options' => array(
'input_filter_spec' => array(
'name' => array(
'required' => true,
),
),
),
));
And it works fine now. Hope this helped someone.
I have the following element in my form, and I tried all possible options found in the web to allow empty value for element:
$this->add(array(
'type' => 'DoctrineModule\Form\Element\ObjectMultiCheckbox',
'name' => 'directPractice',
'options' => array(
'label' => 'A. Check all direct practice field education assignments',
'label_attributes' => array(
'class' => 'label-multicheckbox-group'
),
'required' => false,
'allow_empty' => true,
'continue_if_empty' => false,
'object_manager' => $this->getObjectManager(),
'target_class' => 'OnlineFieldEvaluation\Entity\FieldEducationAssignments', //'YOUR ENTITY NAMESPACE'
'property' => 'directPractice', //'your db collumn name'
'disable_inarray_validator' => true,
'value_options' => array(
'1' => 'Adults',
'2' => 'Individuals',
'3' => 'Information and Referral',
'4' => 'Families',
array(
'value' => 'Other',
'label' => 'Other (specify)',
'label_attributes' => array(
'class' => 'bindto',
'data-bindit_id' => 'otherDirectPracticeTxt_ID'
),
'attributes' => array(
'id' => 'otherDirectPractice_ID',
),
)
),
),
'attributes' => array(
'value' => '1', //set checked to '1'
'multiple' => true,
)
));
And I am always getting the same error message when it is empty:
Validation failure 'directPractice':Array
(
[isEmpty] => Value is required and can't be empty
)
Ok, this is a best what I could come up after researching on it. Solution is inspired by these question.
Form: hidden field and ObjectMultiCheckBox
public function init()
{
$this->setAttribute('method', 'post');
$this->setAttribute('novalidate', 'novalidate');
//hidden field to return empty value. If checkbox selected, checkbox values will be stored with empty value in Json notation
$this->add(array(
'type' => 'Hidden',
'name' => 'otherLearningExperiences[]', // imitates checkbox name
'attributes' => array(
'value' => null
)
));
$this->add(array(
// 'type' => 'Zend\Form\Element\MultiCheckbox',
'type' => 'DoctrineModule\Form\Element\ObjectMultiCheckbox',
'name' => 'otherLearningExperiences',
'options' => array(
'label' => 'C. Check other learning experiences',
'object_manager' => $this->getObjectManager(),
'target_class' => 'OnlineFieldEvaluation\Entity\FieldEducationAssignments',
'property' => 'otherLearningExperiences',
'label_attributes' => array(
'id' => 'macro_practice_label',
'class' => 'control-label label-multicheckbox-group'
),
'value_options' => array(
array(
'value' => 'seminars',
'label' => 'Seminars, In-Service Training/Conferences',
'label_attributes' => array(
'class' => 'bindto',
'data-bindit_id' => 'seminarsTxt_ID'
),
'attributes' => array(
'id' => 'seminars_ID',
),
),
array(
'value' => 'other',
'label' => 'Other (specify)',
'label_attributes' => array(
'class' => 'bindto',
'data-bindit_id' => 'otherLeaningExperiencesTxt_ID'
),
'attributes' => array(
'id' => 'otherLeaningExperiences_ID',
),
)
),
),
'attributes' => array(
//'value' => '1', //set checked to '1'
'multiple' => true,
'empty_option' => '',
'required' =>false,
'allow_empty' => true,
'continue_if_empty' => false,
)
));
Validator
$inputFilter->add($factory->createInput(array(
'name' => 'otherLearningExperiences',
'required' => false,
'allow_empty' => true,
'continue_if_empty' => true,
)));
}
View
//hidden field to be posted for empty value in multicheckbox
echo $this->formHidden($form->get('otherLearningExperiences[]'));
$element = $form->get('otherLearningExperiences');
echo $this->formLabel($element);
echo $this->formMultiCheckbox($element, 'prepend');
Need some guidance with some PHP recursion, I'm looping through some data comparing it against a Map, and if a form (in the data) has a subform it needs to be added to the DB with the parents forms ID.
All seems to be working except a subform is an array as there can be multiple subforms of the same type.
Heres a brief structure:
Parent[0]
SF_1[0]
_SF_2[0]
_SF_2[1]
_SF_2[n]
SF_1[1]
SF_2[0]
SF_n[0]
So I add the parent in a separate function, then start the subform recursion (this bit works fine):
private function add_form_records($_data, $map)
{
$form = new FormItem();
foreach($map["fields"] as $item) {
$key = $item->field;
if(array_key_exists($key, $_data))
{
$form->column_data->$key = $_data[$key];
}
}
$form->list_name = $map["sp_list"];
$form->form_id = $this->id_count;
$form->__metadata->type = $this->get_list_id($form->list_name);
//Add the form to SP and get the ID back for the subforms
$id = $this->add_record($form);
foreach($map["subforms"] as $key=>$value) {
$this->add_subform_records($_data[$key], $value, $form->form_id);
}
}
Then heres the function that gets called to add the subforms and then call itself it the subform has subforms:
private function add_subform_records($_data, $_map, $_parent_id)
{
for ($i = 0; $i < count($_data); ++$i) {
$form = new FormItem();
foreach($_map["fields"] as $fieldItem)
{
$key = $fieldItem->field;
if(array_key_exists($key, $_data[$i]))
{
$form->column_data->$key = $_data[$i][$key];
}
}
$form->parent_id = $_parent_id;
$form->list_name = $_map["sp_list"];
$form->form_id = $this->id_count;
$form->form_name = $_map["subform_name"];
$form->__metadata->type = $this->get_list_id($form->list_name);
$id = $this->add_record($form);
if(array_key_exists('subforms', $_map))
{
foreach($_map["subforms"] as $key=>$value) {
foreach($_data as $subform)
{
if(array_key_exists($key, $subform))
{
$this->add_subform_records($subform[$key],$value, $form->form_id);
}
}
}
}
}
}
So the problem is it adds the first subform, goes to add its subforms (and does) but doesn't come back to the for ($i = 0; $i < count($_data); ++$i) to add the others.
Thanks!
$_data
array ( '_submit' => 'submit', '_submittedTime' => '1386837565194', '_submittedTimezoneOffset' => '11', 'ReportedBy' => 'test', 'DateAndTime' => '2013-12-12 19:38', 'Location' => 'hello', 'ClientName' => 'my', 'DiscussionType' => 'Meeting', 'SF_Attendees' => array ( 0 => array ( 'AttendeeName' => 'name', 'Company' => 'is', 'SF_Trip' => array ( 0 => array ( 'test1' => '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', '_action' => 'add', 'test1_mimetype' => 'image/jpeg', 'test2' => '', 'test3' => '', ), ), '_action' => 'add', ), 1 => array ( 'AttendeeName' => 'S', 'Company' => 'T', '_action' => 'add', ), ), 'ReasonforMeeting' => 'test', 'FollowUp' => '2013-12-19 19:38', 'UserEmail' => 'dev#dev.com', 'EmailCopyTo' => 's#s.com', 'SF_Attend' => array ( 0 => array ( 'AttendeeName' => 'test', 'Company' => 'test', '_action' => 'add', ), ), '_action' => 'add', '_uuid' => '63FD4677-C72A-4F1A-B711-963849B6840B', '_DateAndTime_time_offset' => '+11:00', '_FollowUp_time_offset' => '+11:00', )
$map
array ( 'sp_list' => 'ClientMeetingNote', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'ReportedBy', 'type' => 'textbox', )), 1 => SchemaItem::__set_state(array( 'field' => 'DateAndTime', 'type' => 'timestamp', )), 2 => SchemaItem::__set_state(array( 'field' => 'Location', 'type' => 'textbox', )), 3 => SchemaItem::__set_state(array( 'field' => 'ClientName', 'type' => 'textbox', )), 4 => SchemaItem::__set_state(array( 'field' => 'DiscussionType', 'type' => 'radio', )), 5 => SchemaItem::__set_state(array( 'field' => 'ReasonforMeeting', 'type' => 'text_area', )), 6 => SchemaItem::__set_state(array( 'field' => 'FollowUp', 'type' => 'timestamp', )), 7 => SchemaItem::__set_state(array( 'field' => 'Signature', 'type' => 'sketch_signature', )), 8 => SchemaItem::__set_state(array( 'field' => 'UserEmail', 'type' => 'email', )), 9 => SchemaItem::__set_state(array( 'field' => 'EmailCopyTo', 'type' => 'email', )), ), 'subforms' => array ( 'SF_Attendees' => array ( 'subform_name' => 'SF_Attendees', 'subform_data_name' => 'SF_Attendees', 'sp_list' => 'Attendees', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'AttendeeName', 'type' => 'textbox', )), 1 => SchemaItem::__set_state(array( 'field' => 'Company', 'type' => 'textbox', )), ), 'subforms' => array ( 'SF_Trip' => array ( 'subform_name' => 'SF_Trip', 'subform_data_name' => 'SF_Trip', 'sp_list' => 'Trip', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'test1', 'type' => 'camera', )), 1 => SchemaItem::__set_state(array( 'field' => 'test2', 'type' => 'image_library', )), 2 => SchemaItem::__set_state(array( 'field' => 'test3', 'type' => 'file_upload', )), ), ), ), ), 'SF_Attend' => array ( 'subform_name' => 'SF_Attend', 'subform_data_name' => 'SF_Attendees', 'sp_list' => 'Attendees', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'AttendeeName', 'type' => 'textbox', )), 1 => SchemaItem::__set_state(array( 'field' => 'Company', 'type' => 'textbox', )), ), 'subforms' => array ( 'SF_Trip' => array ( 'subform_name' => 'SF_Trip', 'subform_data_name' => 'SF_Trip', 'sp_list' => 'Trip', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'test1', 'type' => 'camera', )), 1 => SchemaItem::__set_state(array( 'field' => 'test2', 'type' => 'image_library', )), 2 => SchemaItem::__set_state(array( 'field' => 'test3', 'type' => 'file_upload', )), ), ), ), ), ), )
Figured it out!! Had to restructure code as it was looping through the data twice, recursion was working fine I was sending it the wrong data.
Setting up a custom form. Magento doesn't use the 'value' attribute of addField. Suggestions?
Code:
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
'method' => 'post',
'enctype' => 'multipart/form-data',
));
$form->setUseContainer(true);
$this->setForm($form);
$fieldset = $form->addFieldset('example_form', array(
'legend' =>Mage::helper('categoryrules')->__('Example Information')
));
...
$entityType = Mage::getModel('eav/config')->getEntityType('test_category_rule');
$entityTypeId = $entityType->getEntityTypeId();
...
$fieldset->addField('entity_type_id', 'hidden', array(
'name' => 'entity_type_id',
'value' => $entityTypeId
));
Output:
<input id="entity_type_id" name="entity_type_id" value="" type="hidden">
EDIT:
results of print_r($entityType->debug());
Array (
[entity_type_id] => 11
[entity_type_code] => rogue_category_rule
[entity_model] => categoryrules/rules
[attribute_model] =>
[entity_table] => categoryrules/rules
[value_table_prefix] =>
[entity_id_field] =>
[is_data_sharing] => 1
[data_sharing_key] => default
[default_attribute_set_id] => 0
[increment_model] =>
[increment_per_store] => 0
[increment_pad_length] => 8
[increment_pad_char] => 0
[additional_attribute_table] =>
[entity_attribute_collection] =>
)
Try to write here any constant like:
$fieldset->addField('entity_type_id', 'hidden', array(
'name' => 'entity_type_id',
'value' => 11
));
Or:
$fieldset->addField('entity_type_id', 'hidden', array(
'name' => 'entity_type_id'
));
$form->setValues($entityType->getData());