0

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

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

我想使用多选选择框也存在同样的问题。

4

2 回答 2

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"));
于 2014-04-29T22:00:36.237 回答
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;
    }
}
于 2017-02-02T11:23:30.003 回答