作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Phalcon 创建一个表单上面有一个复选框。我使用此代码在我的 PagesForm.php
文件中创建复选框
$this->add(new Check('usesLayout'));
然后在我看来我有
{{ form.render("usesLayout") }}
但是,如果未选中该复选框,则 Phalcon 会提示 usesLayout is required
。
View 生成的html
代码是
<input type="checkbox" id="usesLayout" name="usesLayout" value="1" checked="checked" />
创建带有复选框的 Phalcon 表单以使其接受选中和未选中的正确方法是什么?
期望的结果
回顾使用CakePHP时制作的表格后html 输出是
<input type="hidden" name="usesLayout" id="usesLayout_" value="0" />
<input type="checkbox" name="usesLayout" id="usesLayout" value="1" checked="checked" />
这很好用,所以我正在寻找类似的东西。
当前的解决方法
在对this question的最终响应中修改代码后我目前有这个解决方法(我使用这个而不是 Phalcon\Forms\Element\Check
)
namespace Armaware\InBrowserDev\Forms\Element;
use Phalcon\Forms\Element\Check as PhalconCheck;
class Check extends PhalconCheck
{
/**
* Renders the element widget returning html
*
* @param array|null $attributes Element attributes
*
* @return string
*/
public function render($attributes = null)
{
$attrs = array();
if (!is_null($attributes)) {
foreach ($attributes as $attrName => $attrVal) {
if (is_numeric($attrName) || in_array($attrName, array('id', 'name', 'placeholder'))) {
continue;
}
$attrs[] = $attrName .'="'. $attrVal .'"';
}
}
$attrs = ' '. implode(' ', $attrs);
$id = $this->getAttribute('id', $this->getName());
$name = $this->getName();
$checked = '';
if ($this->getValue()) {
$checked = ' checked';
}
return <<<HTML
<input type="hidden" id="{$id}_" name="{$name}" value="0" />
<input type="checkbox" id="{$id}" name="{$name}" value="1"{$attrs}{$checked} />
HTML;
}
}
最佳答案
public Phalcon\Forms\ElementInterface setDefault (unknown $value) inherited from Phalcon\Forms\Element
Sets a default value in case the form does not use an entity or there is no value available for the element in _POST
Source .
看起来你的表单声明可以是这样的:
$controls[] = (new Check('usesLayout', ['value' => '1']))
->setLabel('Should I use layout?')
->setDefault('0') // or `false` in case it's not filtered
->addFilter('bool'); // filtering to boolean value
未测试,但可能会。您总是可以尝试在表单的 beforeValidation()
方法中处理这个问题,但是现在没有空间来测试它,并且我不会在这里冒险尝试失败的解决方案。
关于forms - 如何在 Phalcon 表单中使用复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32360421/
我是一名优秀的程序员,十分优秀!