Ha. I never noticed that before. Seems like it should be fixed.
In the meantime, you can either edit lithium\template\helper\Form
or create app\extensions\helper\Form
in your app (replacing app
with your app's namespace if you changed it from the default app
).
The method that needs to change is _defaults()
. Here are contents that will get a zero value to display:
protected function _defaults($method, $name, $options) {
$methodConfig = isset($this->_config[$method]) ? $this->_config[$method] : array();
$options += $methodConfig + $this->_config['base'];
$options = $this->_generators($method, $name, $options);
$hasValue = (
(!isset($options['value']) || $options['value'] === null) &&
$name && $value = $this->binding($name)->data
);
$isZero = (isset($value) && ($value === 0 || $value === "0"));
if ($hasValue || $isZero) {
$options['value'] = $value;
}
if (isset($options['value']) && !$isZero) {
$isZero = ($options['value'] === 0 || $options['value'] === "0");
}
if (isset($options['default']) && empty($options['value']) && !$isZero) {
$options['value'] = $options['default'];
}
unset($options['default']);
$generator = $this->_config['attributes']['name'];
$name = $generator($method, $name, $options);
$tplKey = isset($options['template']) ? $options['template'] : $method;
$template = isset($this->_templateMap[$tplKey]) ? $this->_templateMap[$tplKey] : $tplKey;
return array($name, $options, $template);
}
The current version has some conditionals that fail with either an actual zero integer or the string "0"
.