2012-05-30 28 views
2

使用Lithium框架開發PHP應用程序時,我注意到零值未顯示在表單中的文本字段中。目前,我從MySQL數據庫獲取數據,顯示數據並進行更新。我可以將零值保存到數據庫,並且從數據庫返回的信息是正確的,因爲我可以在將值直接回顯給頁面時查看它,並且除零以外的任何值都可以正確顯示。有誰知道如何使用鋰形式渲染零值,或者在使用Lithium渲染之前禁用值檢查?Lithium幫助程序在字段中不顯示值零(0)

我使用由鋰綁定到使用<?=$this->form->create($object); ?>

+0

嘗試將其轉換爲字符串:'$ value =(string)$ valueFromDb' –

+0

沒有好運。無論如何,從數據庫返回的值都以字符串形式返回。 – iralls

回答

2

哈對象的形式的內部設置的默認<?=$this->form->field...。我以前從未注意到。似乎應該修復它。

在此期間,您可以編輯lithium\template\helper\Form或在您的應用程序創建app\extensions\helper\Form(與你的應用程序的命名空間替換app,如果你從默認app改變了它)。

需要更改的方法是_defaults()。以下是內容,將得到一個零值顯示:

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

目前的版本有一些條件語句是失敗,併爲實際的零整數或字符串"0"

+0

我正在考慮提交拉請求。此更改將多個對象綁定到表單中,從而打破了一些單元測試。不知道爲什麼(我甚至不知道多個綁定是可能的)。一旦解決問題,我會用最終的解決方案更新這個答案。 – rmarscher

+1

拉請求在這裏:https://github.com/UnionOfRAD/lithium/pull/507 – rmarscher

+0

這被合併到鋰開關分支。應儘快提供給大師。 – rmarscher

相關問題