基本上,我需要序列化多个复选框,然后再将它们保存在数据库中并在显示表单之前反序列化。
<input type="checkbox" name="list[option1]" value="1">
<input type="checkbox" name="list[option2]" value="1">
<input type="checkbox" name="list[option3]" value="1">
有人能指出我正确的方向吗?
我已尝试使用以下代码生成复选框,但在请求后它无效。 选定的选项不会填充到表单中(其他字段很好)
<?php
$form->bind($_POST, $entity);
....
foreach ($list as $key => $option) {
$form->add(new Check("list[$key]", array('value' => 1)));
}
我认为使用多选选择框存在同样的问题。
答案 0 :(得分:1)
我认为你有一个错字。尝试:
<?php
$form->bind($_POST, $entity);
....
foreach ($list as $key => $option) {
$form->add(new Check($list[$key], array('value' => 1)));
}
另外,Phalcon\Tag帮助程序可用于生成HTML。
<?php
echo Phalcon\Tag::checkField(array($list[$key], "value" => "1"));
答案 1 :(得分:0)
您可以使用我的代码Fdola.com。 使用
<?php
$list_module = new \App\Vendor\Fdola\Forms\CheckBoxList('list_module', ['a' => 'A', 'b' => 'B'], ['a'], ['class' => 'checkBoxList']);
$list_module->setLabel('Module hiển thị banner:');
$list_module->addValidators([
new \Phalcon\Validation\Validator\PresenceOf([
'message' => '<b>:field</b> không được phép rỗng'
])
]);
$this->add($list_module);
<?php
/**
* Created by PhpStorm.
* User: thanhansoft
* Date: 4/29/2016
* Time: 4:21 PM
*/
namespace App\Vendor\Fdola\Forms;
use Phalcon\Http\Request;
use Phalcon\Tag;
class CheckBoxList extends \Phalcon\Forms\Element {
private $_data;
private $_dataOld;
public function __construct($name, $data, $dataOld = null, $attribute = null) {
$this->_data = $data;
$this->_dataOld = $dataOld;
parent::__construct($name, $attribute);
}
public function render($attribute = null) {
$get_value = $this->getValue();
if ($get_value) {
$data = $get_value;
} else {
$data = $this->_dataOld;
}
$tag = new Tag();
$string = '';
if ($this->_data) {
foreach ($this->_data as $key => $value) {
$arr = ['id' => $this->_name . '-' . $key, 'name' => $this->_name . '[]', 'value' => $key];
if ($data && in_array($key, $data)) {
$arr['checked'] = 'checked';
}
$string .= '<label>' . $tag::checkField($arr) . ' ' . $value . '</label>';
}
}
if (isset($this->_attributes['class'])) return '<div class="' . $this->_attributes['class'] . '">' . $string . '</div>';
return $string;
}
}