can somehow unchecked checkboxes be included when I have a form with a dynamic number of checkboxes (name='golyPenalta[]') and in submit I get them using $form->getHttpData($form::DATA_TEXT, "golyPenalta[]"); ? Only the ones that have been checked are placed in the field and have their own order, so I do not know which penalty belongs to which goal:
golyCas => array (3)
0 => "55" (2)
1 => "60" (2)
2 => "70" (2)
golyPenalta => array (2)
0 => "on" (2)
1 => "on" (2) // <- this should be part of third goal so index should be 2
I already tried to do it with $form->getHttpData($form::DATA_TEXT | $form::DATA_KEYS, "golyPenalta[]"); but with no luck. The dump above is from the dump of $form in attribute httpData.
Unfortunately no, unchecked checkboxes aren't even sent in POST data in http. You have to define the elements in nette and then use $form->getValues() to have them included. If you add them just on the client side, the server has no chance to know they exist.
I eventually made it with specific key in input name name='golyPenalta[key]' when I create dynamic numbers of this field. It can be done either way by Nette form name='golyPenalta[{key}]' or I create it by JavaScript in for loop when I get the number of fields I have to create like this name='golyPenalta[$i]'.
In form submit I use $form->getHttpData($form::DATA_TEXT | $form::DATA_KEYS, "golyPenalta[]") to persist these keys.
Related
I just want to check if it's possible to give setFilter values in callback, in form of complex objects instead of array of strings. Reason why we need setFilter to have complex objects is because we are using server side filtering and we would like to show labels in filter, but send back keys to server to perform filtering.
If we have for example objects like {name: 'some name', id: 1} we would like to show 'some name' in filter UI but when that filter is selected we need associated id (in this case 1).
By looking into source code of setFilter and corresponding model, it seems like this is not possible.
Is there a way maybe I am missing that this could work?
ag-Grid version 23.2.0
I have exactly the same problem, from the interface it seems impossible indeed because of expected string[] values
interface SetFilterValuesFuncParams {
// The function to call with the values to load into the filter once they are ready
success: (values: string[]) => void;
// The column definition object from which the set filter is invoked
colDef: ColDef;
}
I would like to include up to 3 conditions in a MailMerge field. Below is my current field which returns 1 if checkbox1 is checked.
if"<<cb1>>"="Yes" "Checked""Unchecked"
I would like to include checking of additional cb2 and cb3, to check if any of them are checked.
May I know how can it be done?
p.s. I left out the { } colons which I am not sure if it will be required here.
Edit: Tried the following structure but the output was Yes
if
"if"<<cb1>>"="Yes" "1""0""
+
"if"<<cb2>>"="Yes" "1""0""
+
"if"<<cb3>>"="Yes" "1""0""
>0
"1 or more checked""None checked"
Try a field coded as:
{IF{={IF«cb1»= "Yes" 1 0}+{IF«cb2»= "Yes" 1 0}+{IF«cb3»= "Yes" 1 0}}> 0 "1 or more checked" "None checked"}
Note: The field brace pairs (i.e. '{ }') for the above example are all created in the document itself, via Ctrl-F9 (Cmd-F9 on a Mac or, if you’re using a laptop, you might need to use Ctrl-Fn-F9); you can't simply type them or copy & paste them from this message. Nor is it practical to add them via any of the standard Word dialogues. Likewise, the chevrons (i.e. '« »') are part of the actual mergefields - which you can insert from the 'Insert Merge Field' dropdown (i.e. you can't type or copy & paste them from this message, either). The spaces represented in the field constructions are all required.
For example, you can create a field with logic such as: “If Condition 1 is met, then if Condition 2 is also met, display Result 1”. This is equivalent to saying “if both conditions are met, display Result 1”; but unfortunately you can't use “and” in Word fields.
Such a field would look something this:
{ IF [Condition 1] { IF [Condition 2] [Display Result 1] "" } "" }
The easiest way to create nested fields of this type is to create them separately, then cut and paste one field into the other.
Source
I have created a form object in symfony, which is meant to process an api request. It is created in a controller via:
$myForm = new MyFormType($foo, $bar);
$form = $this->createForm($myForm, $entity, array('method' => 'POST', 'csrf_protection' => false));
Once these objects are created, I pass them into an external service which converts api data into data that's meant to be consumed by the form, like the following:
//I pass this in, so that, our api users don't have to pass in
//{uglyAPIVariable45: 721}, but rather {pretty_variable: "go left"}
$goodData = $this->convertOldData($form->getBuilderDataCopy(), $oldData);
One of the things this service does, is if the form has a choice, like a select tag, it attempts to convert any string passed to the api into the value in select tag. This way, if the user can pass over "East" if the select field has the options "North", "West", "South" and "East" associated with the values 0, 4, 5 and 10 and the converter should return 10. The user doesn't have to pass over one of those random values, they can just pass over the string. And if they passed over "Foo", it would return an error along with a description of what good choices they could pass over.
My problem is that, in production, I'm not able to get ahold of those values.
In development, I found that I could get my options using,
foreach($formBuilderDataCopy as $formElement){
$options = $formElement->getAttributes()['data_collector/passed_options']['choices'];
}
But when we moved to production, this code broke. The method, getAttributes, returned null suddenly. Admittedly, it seemed kind of janky to begin with, so I wanted to find a more valid approach to getting these choices, possibly even allowing me to bypass a different approach for 'choice', 'entity', 'timezone' et. al.
Unfortunately, looking through the source code and exploring it with get_class_methods and friends hasn't provided me with a solution this issue. Even when I get choices, the most I can get are values, but not the string options in the select box.
What's the appropriate approach to acquiring such information from my symphony forms?
As a side note, I have also tried:
$form->get('elementName')->getConfig()->getOption('choices');
But it also just returns a list of the ids to single numbers and not the strings that replace those numbers. e.g.
{3: 0, 5: 1, 10: 2, 11: 3...}
Create an entity Object for the form type. Then you can use the data as object. It must not been a doctrine entity.
We have a test requirement to verify that only the expected fields appear on a page. I can verify this case as: True, the expected fields appear. But I cannot verify that "only" these fields appear. So the condition is something like:
Verify: Except field[id/name]="test" NO (input OR select) element exists.
- The above will tell me that except the field I am expecting there is no other dropdown/text/checkbox/etc on the page. This is a simple usecase; in real world ofcourse a page will have multiple fields hence I need to veirfy that except these [5] fields no other field exists.
Any idea how to do this in IDE only? Or is there any hack possible to get this verified using IDE only?
You posted no code, so I cannot reply with any code!
The approach you could take is count the number of all fields on a page, and count number of field you are interested in. The two should match.
I'm using this construction for my element:
$freetext = $this->CreateElement('textarea', 'freetext')
->setLabel('Comments')
->setAttrib('class','input-textarea')
->setOptions(array('rows' => '2', 'cols'=>'30'))
->addValidator('StringLength', false, array(0,500))
->addFilter('HtmlEntities')
->addFilter('StripTags')
->setRequired(true);
I want to add an "allowEmpty" to this but can't find the correct syntax. I was hoping for something like:
... ->addValidator('allowEmpty', false, true)
But this does not work.
Edit: I've changed the setRequired() to true - I want to allow empty string as an acceptable value on a require field.
Regardless of usage, how do I add this option to my element?
->setRequired(false);
this is enough if you want to allow an empty string and save an empty string to database.
if you want the field to be optional and keep null value in database if nothing is given, add:
->addFilter(new Zend_Filter_Null)
$freetext = $this->CreateElement('textarea', 'freetext')
->addValidator('StringLength', false, array(10,500))
->setRequired(false);
Your code should already do that, the setRequired(false) method do what you're asking for, i.e. if the value is not submitted then validators won't be run.
Do you have any issue with the code you've written, some validation error messages or something else?
Update
I've changed the setRequired() to true - I want to allow empty string as an acceptable value on a require field.
What is the semantic in setRequired(true) and allowing the empty string as a valid value? Or better what do you require if the element can be empty?
What you've asked in the edit is a no sense, because if an element is required it MUST have a value different from the empty string. If you need to accept the empty string as a valid value just use setRequired(false). When you get form values with Zend_Form::getValues() or Zend_Form_Element::getValue() you'll obtain the empty string as result.
Anyway here it's the explanation of setRequired and setAllowEmpty from ZF manual:
Using the defaults, validating an Element without passing a value, or
passing an empty string for it, skips all validators and validates to
TRUE.
setAllowEmpty(false) leaving the two other mentioned flags
untouched, will validate against the validator chain you defined for
this Element, regardless of the value passed to isValid().
setRequired(true) leaving the two other mentioned flags untouched,
will add a 'NotEmpty' validator on top of the validator chain (if none
was already set)), with the $breakChainOnFailure flag set. This
behavior lends required flag semantic meaning: if no value is passed,
we immediately invalidate the submission and notify the user, and
prevent other validators from running on what we already know is
invalid data.
If you do not want this behavior, you can turn it off by passing a
FALSE value to setAutoInsertNotEmptyValidator($flag); this will
prevent isValid() from placing the 'NotEmpty' validator in the
validator chain.