2015-04-10 3 views
0

В форме Viewhelper У меня есть много числовых полей, которые по умолчанию должны быть пустыми, а не «0» или «0.00».TYPO3 Extbase: как хранить NULL в БД для пустых числовых полей?

Мне это нужно, потому что в файле saveAction должна использоваться другая обработка данных, в зависимости от пустых полей или заполненных значений (включая 0).

По этой причине я установить свойства поля в таблице базы данных на NULL по умолчанию, например:

CREATE TABLE IF NOT EXISTS `tx_myext_domain_model_result` (
    mw double (10,2) DEFAULT NULL, 
    mw2 double (10,2) DEFAULT NULL, 
    .... 
); 

TCA выглядит следующим образом:

'mw' => array(
    ... 
     'config' => array(
      'type' => 'input', 
      'size' => 30, 
      'eval' => 'double2,null' 
     ) 
    ), 

Кроме того, в классе Результат модели, соответствующие свойства инициализируются с помощью NULL;

/** 
* mw 
* 
* @var float 
*/ 
protected $mw = null; 

Я сделал эту проверку, чтобы гарантировать, что NULL обрабатывается к геттеру для пустой полой формы:

public function setMw($mw) { 
     if ($mw == NULL) 
      $this->mw = 999; 
     else 
      $this->mw = $mw; 
} 

Это сделало то, что я освобожденное: ММ поле DB был установлен на «999» для пустое поле формы.

Но теперь, переключается обратно в нормальный сеттера,

public function setMw($mw) { 
     $this->mw = $mw; 
} 

полей в таблице БД только левый NULL, когда все остальные поля формы пусты, тоже. То есть как только я ввожу значение в одно из полей формы, все остальные пустые поля формы устанавливаются на «0» при сохранении.

Добавление null в поле TCA eval также не помогло.

Как я могу изменить это поведение? Я использую TYPO3 6.2.x

+0

Что ваша конфигурация TCA? Возможно, вы можете использовать 'type converter' в вашем контроллере (' initializeAction'). – pgampe

+0

Добавлен TCA. Как использовать конвертер типов? Я не хочу менять тип; Я просто NULL, который должен оставаться NULL. Действие не должно быть проблемой, поскольку NULL прибывает в геттер. – rantanplan

ответ

0

Шаг 1: в initializeAction set null для свойства Шаг 2: идея с проверкой $ mw равна null - это preaty хорошая идея. TYPO3 не всегда делать то, что вы можете предположить, используя логическое мышление :) Так что проверить if(is_null($mw)) $this->mw = null

это две вещи должны сделать трюк

вы также можете установить значение по умолчанию в инкубационном парам

setMw($mw = null)

+0

Я не понимаю, почему существует разница между '$ this-> mw = $ mw' и' $ this-> mw = NULL', когда $ mw _is_ NULL? Что вы имеете в виду с set null в initializeAction? Свойство не должно всегда быть нулевым, только если поле формы осталось пустым ... 'is_null()' не работает, потому что 0 должно храниться в БД. – rantanplan

+0

1. TYPO3 может не устанавливать значение null, если вы думаете, что оно установит 2. initializeAction - это действие, которое есть в каждой модели, но вам не нужно его использовать. Он инициализирует разные вещи. Например, если у вас есть коллекция, чем у этого действия, у вас будет ее инициализация. Это своего рода конструктор 3. Если null должен быть только тогда, когда он пуст, тогда, когда вы установите значение свойства по умолчанию равным null, он должен сделать трюк.Я написал это: 'setMw ($ mw = null)' это установит значение null по умолчанию – Fixus

+0

1. Это не имеет ничего общего с TYPO3, это просто PHP - или логично: это то же самое, что сказать '$ mw = 1; $ this-> mw = $ mw' и '$ this-> mw = 1;' будут иметь другой эффект. 2. Я знаю, что такое intitializeAction, но как это решит мою проблему? Почему я должен установить $ mw = NULL там, когда это NULL? NULL приходит в сеттер, поэтому действие ничего не изменит. 3. Я просто хочу хранить NULL в БД, когда я устанавливаю $ mw = NULL (равное пустому полю формы). Но почему-то Extbase этого не допустит. 'setMw ($ mw = null)' и вызов 'setMw (null)' должен привести к такому же результату. – rantanplan