Skip to content

Commit 51e0f12

Browse files
committed
+default field alter for checkbox fields
1 parent cd17545 commit 51e0f12

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

src/Kris/LaravelFormBuilder/Fields/CheckableType.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
class CheckableType extends FormField
66
{
77

8+
const DEFAULT_VALUE = 1;
9+
810
/**
911
* @inheritdoc
1012
*/
@@ -25,7 +27,7 @@ public function getDefaults()
2527
{
2628
return [
2729
'attr' => ['class' => null, 'id' => $this->getName()],
28-
'value' => 1,
30+
'value' => self::DEFAULT_VALUE,
2931
'checked' => null
3032
];
3133
}

src/Kris/LaravelFormBuilder/FormHelper.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Illuminate\Support\Collection;
1010
use Illuminate\Translation\Translator;
1111
use Kris\LaravelFormBuilder\Events\AfterCollectingFieldRules;
12+
use Kris\LaravelFormBuilder\Fields\CheckableType;
1213
use Kris\LaravelFormBuilder\Fields\FormField;
1314
use Kris\LaravelFormBuilder\Form;
1415
use Kris\LaravelFormBuilder\RulesParser;
@@ -336,6 +337,43 @@ public function mergeAttributes(array $fields)
336337
return $attributes;
337338
}
338339

340+
/**
341+
* Get a form's checkbox fields' names.
342+
*
343+
* @param Form $form
344+
* @return array
345+
*/
346+
public function getBoolableFields(Form $form)
347+
{
348+
$fields = [];
349+
foreach ($form->getFields() as $name => $field) {
350+
if ($field instanceof CheckableType && $field->getOption('value') == CheckableType::DEFAULT_VALUE) {
351+
$fields[] = $this->transformToDotSyntax($name);
352+
}
353+
}
354+
355+
return $fields;
356+
}
357+
358+
/**
359+
* Turn checkbox fields into bools.
360+
*
361+
* @param Form $form
362+
* @param array $values
363+
* @return void
364+
*/
365+
public function alterFieldValuesBools(Form $form, array &$values)
366+
{
367+
$fields = $this->getBoolableFields($form);
368+
369+
foreach ($fields as $name) {
370+
$value = Arr::get($values, $name, -1);
371+
if ($value !== -1) {
372+
Arr::set($values, $name, (int) (bool) $value);
373+
}
374+
}
375+
}
376+
339377
/**
340378
* Alter a form's values recursively according to its fields.
341379
*
@@ -345,6 +383,8 @@ public function mergeAttributes(array $fields)
345383
*/
346384
public function alterFieldValues(Form $form, array &$values)
347385
{
386+
$this->alterFieldValuesBools($form, $values);
387+
348388
// Alter the form's child forms recursively
349389
foreach ($form->getFields() as $name => $field) {
350390
if (method_exists($field, 'alterFieldValues')) {

0 commit comments

Comments
 (0)