Преобразование флажка в логическое значение

В зависимости от механизма представления формы HTML любые значения элемента флажка могут рассматриваться как «вкл», «выкл», 1, 0, «истина», «ложь».

Есть ли в структуре Laravel помощник, который может «привести» переданный флажок FormData (или простую форму) к логическому значению.

Я мог бы сделать свой собственный, но спросить здесь стоит того.

Вот что я бы использовал:

<?phpfunction checkbox_boolean($parameter) {
if (is_bool($parameter)) return $parameter;
if (is_object($parameter)) return count(get_object_vars($parameter)) !== 0;
if (is_array($parameter)) return count($parameter) !== 0;
if (is_numeric($parameter)) { return (boolean) $parameter; }
$p = is_string($parameter) ? strtolower($parameter) : $parameter;

switch ($p) {
case 'yes';
case 'on';
case 'true';
return true;
break;

case null;
case 'no';
case 'off';
case 'false';
return false;
break;
}
return false;
}

print_r([
'yes' => [
'"true"' => checkbox_boolean('true'),
'true' => checkbox_boolean(true),
'1' => checkbox_boolean(1),
'"1"' => checkbox_boolean('1'),
'yes' => checkbox_boolean('yes'),
'YEs' => checkbox_boolean('YEs'),
'<non-empty object>' => checkbox_boolean((object) [ 'z' => 'z']),
'<non-empty array[0]>' => checkbox_boolean([0]),
],
'no' => [
'"false"' => checkbox_boolean('false'),
'false' => checkbox_boolean(false),
'0' => checkbox_boolean(0),
'"0"' => checkbox_boolean('0'),
'no' => checkbox_boolean('no'),
'No' => checkbox_boolean('No'),
'<empty object>' => checkbox_boolean(new stdClass),
'<empty array []>' => checkbox_boolean([]),
]
]);

Этот вопрос не является дубликатом «Как преобразовать строки в логические», потому что это не общая проблема. Я спрашиваю о конкретном процессе преобразования HTML-форм или, вернее, элементов флажков в логические. Важной частью вопроса / проблемы является определение общих значений, которые эти флажки генерируют, когда передаются различными (общими) методами и анализируются PHP.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]