I need to display a default text for the dropdown but I dont want it to be selectable when user clicks on the dropdown:
$this->add(array(
'name' => 'quicksearch',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'empty_option' => 'Quick Search',
'value_options' => array(
'1' => 'Online Now',
'2' => 'Most Popular'
),
),
'attributes' => array(
'id' => 'quicksearch',
'class' => 'quicksearch selectyze1 comonserchclas',
),
));
In the above I need to display Quick Search as default but not selectable. Is there any option to not display the Quick Search text when user clicks on dropdown ?
Try creating the options array as follows:
$options = array(
array('value' => '0', 'label' => 'Quick Search', 'disabled' => 'disabled'),
array('value' => '1', 'label' => 'Online Now'),
array('value' => '2', 'label' => 'Most Popular')
);
Related
I have the following multicheckbox:
$this->add(array(
'type' => 'DoctrineModule\Form\Element\ObjectMultiCheckbox',
'name' => 'directPractice',
'options' => array(
'label' => 'A. Check all direct practice field education assignments',
**EDIT 1:**
'label_attributes' => array(
'class' => 'label-multicheckbox-group'
),
'object_manager' => $this->getObjectManager(),
'target_class' => 'OnlineFieldEvaluation\Entity\FieldEducationAssignments', //'YOUR ENTITY NAMESPACE'
'property' => 'directPractice', //'your db collumn name'
'value_options' => array(
'1' => 'Adults',
'2' => 'Individuals',
'3' => 'Information and Referral',
'4' => 'Families',
),
),
'attributes' => array(
'value' => '1', //set checked to '1'
'multiple' => true,
)
));
How to make the following part bold?
Using label_attributes makes all labels bold, and I want just the main label for the multibox be bold.
'label' => 'A. Check all direct practice field education assignments',
EDIT 1: add label_attributes to "options"
When I add label_attributes as #itrascastro suggested, all labels become bold and I want only the top one to become bold: multicheckbox
Try to add this to your options:
'options' => array(
'label_attributes' => array(
'class' => 'myCssBoldClass'
),
// more options
),
Each value option accepts an array of options.
For example
'value_options' => [
[
'label' => 'Adults',
'label_attributes' => [
'class' => 'my-bold-class',
],
'attributes' => [],
'value' => 1,
'selected' => false,
'disabled' => false,
],
'2' => 'Individuals',
'3' => 'Information and Referral',
'4' => 'Families',
],
I've added in some other values you can define; they are obviously optional.
Since there is no build in option to do this just for the top label, I used jQuery to accomplish this:
$("label[for]").each(function(){
$(this).addClass("label-bold");
});
My code for my form ( i am using Silex):
$test = array(
'Swedish Cars' => array(
'volvo' => 'Volvo',
'saab' => 'Saab',
),
'German Cars' => array(
'mercedes' => 'Mercedes',
'audi' => 'Audi'
)
);
$form = $app['form.factory']->createBuilder('form')
->add('title','text',array(
'attr' => array(
'placeholder' => 'Title of your Album'
)))
->add('description','textarea',array(
'attr' => array(
'placeholder' => 'Describe your Album'
)))
->add('groups', 'choice', array(
'choices' => $test,
'multiple' => true,
'attr' => array(
'data-placeholder' => 'Add your Groups ...'
),
))
The choices are defined as an multi-array, so I get <option> with <optgropup>. How can I enable in SF2, that some options are selected?
Use the data option:
->add('groups', 'choice', array(
'choices' => $test,
'multiple' => true,
'attr' => array(
'data-placeholder' => 'Add your Groups ...',
'data' => $selected_value
),
where $selected_value can be a single value like 'value_1' or an simple array with multiple values array('value_1', 'value_2') to select.
In \Zend\Validator\DateStep, I want to override the error message shown below:
protected $messageTemplates = array(
self::NOT_STEP => "The input is not a valid step"
);
I have an input filter connected to a form containing an element of the type 'Zend\Form\Element\Date' which automatically calls the DateStep validator.
Here is the relevant part of my form:
$this->add(array(
'type' => 'Zend\Form\Element\Date',
'name' => 'appointment-date',
'options' => array(
'label' => 'Appointment Date',
'format' => 'Y-m-d'
),
'attributes' => array(
'min' => date('Y-m-d'), // today's date
'max' => '2020-01-01',
'step' => '2', // days; default step interval is 1 day
)
));
Here is my input filter:
$inputFilter->add($factory->createInput(array(
'name' => 'appointment-date',
'required' => false,
'filters' => array(
array('name' => 'StripTags'),
),
'validators' => array(
array(
'name' => 'DateStep',
'options' => array(
//'step' => new DateInterval("P2D"),
//'baseValue' => new DateTime(),
'messages' => array(
\Zend\Validator\DateStep::NOT_STEP => 'Must be a day in the future',
),
),
),
),
)));
The inputFilter seems to be ignored. I tried setting up the step and baseValue in the inputFilter, but that seems to not work at all. Working app can be found here: https://github.com/bickerstoff/zf2_datetest if more details are needed.
Looks like you're trying to filter a "Date" input with a "DateStep" validator.
$this->add(array(
'type' => 'Zend\Form\Element\Date',
'name' => 'appointment-date',
'options' => array(
'label' => 'Appointment Date',
'format' => 'Y-m-d'
),
'attributes' => array(
'min' => date('Y-m-d'), // today's date
'max' => '2020-01-01',
'step' => '2', // days; default step interval is 1 day
)
));
This may cause your problem.
I'm setting up a controller that will create a form.
I can't use an extended to Form class, so i need to build up my form on my controller.
$form = new Form('example');
$fieldset = new Fieldset('default');
$fieldset->add(array('name' => 'example_field', 'attributes' => array('type' => 'text', 'id' => 'example_field'), 'options' => array('label' => 'Example Field',),));
$form->add($fieldset);
The main question here is, how do I define the filters and validators for each element/fieldset without required to create a class implementing InputFilterAwareInterface, so i can do everything from my controller?
Thanks in advance!
You could add/remove form Validators by handle InputFilter of form, here is my example:
$form = new \Zend\Form\Form();
$name = array(
'name' => 'username',
'options' => array(
'label' => 'Your name',
),
'attributes' => array(
'type' => 'text'
),
);
$form->add($name);
$filter = $form->getInputFilter();
$filter->remove('username');
$filter->add(array(
'name' => 'username',
'required' => true,
'validators' => array (
'stringLength' => array (
'name' => 'StringLength',
'options' => array (
'max' => '3',
),
),
),
));
$form->setInputFilter($filter);
$form->setData(array(
'username' => 'longtext',
));
$form->prepare();
echo $form->isValid(); //false
print_r($form->getMessages()); //stringLengthTooLong error will show
Add validator dynamically:
$form->getInputFilter()->get('element_name')->getValidatorChain()->attach(new ValidatorClassName());
Add filter dynamically:
$form->getInputFilter()->get('element_name')->getFilterChain()->attach(new FilterClassName());
Currently, I have this select code in ZF2. Works great, have no issues, BUT! I want to put an id or class attribute into one of the options. Is that possible currently in ZF2?
$this->add(
array(
'name' => 'number_of_rooms',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => 'Number of Rooms',
'options' => array(
array(
'value' => '',
'label' => '- number of rooms -',
'disabled' => true,
),
array(
'value' => 'one bedrooms,
'label' => '1 Bedrooms',
),
array(
'value' => 'two bedrooms',
'label' => '2 Bedrooms',
),
array(
'value' => 'three bedrooms',
'label' => '3 Bedrooms',
),
),
),
'attributes' => array(
'id' => 'number_of_rooms',
),
)
);
You would need to do two things. First would be to write your own SelectElement extending Zend\Form\Element\Select and then you'd need to also write your own ViewHelper rendering the Select, easiest extending Zend\Form\View\Helper\FormSelect
With the inbuilt Select the only valid options are:
//FormSelect.php #43-48
protected $validOptionAttributes = array(
'disabled' => true,
'selected' => true,
'label' => true,
'value' => true,
);
You can check this from the classes linked above.