2

PHPアプリケーションの開発にLithiumフレームワークを使用しているときに、フォームのテキストフィールドに値ゼロが表示されていないことに気付きました。現在、MySQLデータベースからデータを取得して表示し、更新しています。値ゼロをデータベースに保存することができ、データベースから返される情報は正しいです。値をページに直接エコーするときに表示でき、ゼロ以外の値は正しく表示されます。リチウム形式でゼロ値のレンダリングを有効にする方法、またはリチウムでレンダリングする前に値チェックを無効にする方法を知っている人はいますか?

<?=$this->form->field...を使用してオブジェクトにバインドされたフォーム内でリチウムによって提供されるデフォルトを使用しています<?=$this->form->create($object); ?>

4

1 に答える 1

2

ハ。今まで気づかなかった。修正する必要があるようです。

それまでの間、アプリで編集lithium\template\helper\Formまたは作成することができます(デフォルトから変更した場合は、アプリの名前空間app\extensions\helper\Formに置き換えます)。appapp

変更する必要があるメソッドはです_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"

于 2012-05-30T21:57:44.607 に答える