Phalcon - 表单中的多个复选框

时间:2013-11-01 13:58:09

标签: php phalcon

基本上,我需要序列化多个复选框,然后再将它们保存在数据库中并在显示表单之前反序列化。

<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)));
}

我认为使用多选选择框存在同样的问题。

2 个答案:

答案 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;
    }
}