symfony1 doctrine form submit - 在哪里注入逻辑

时间:2015-02-28 11:45:59

标签: php forms doctrine symfony1 symfony-1.4

我有一个简单的表单,其中包含一个需要钱的输入,即浮动。到目前为止,它只能接受格式良好的十进制数,例如12768.56。注入一些服务器端逻辑(这里没有javascript)拦截输入值的任务,如12 768,56,用12768.56替换它,让symfony / doctrine完成它的工作。转型仅仅是一个例子,我得到了我需要的东西,但问题是 - 我应该把截取功能放在哪里?我想它应该是 XxxForm.class.php 中的一些。但我不知道哪种方法。 doSaveprocessData?我非常确定有一个特殊的地方......

2 个答案:

答案 0 :(得分:2)

您应该将这些逻辑放入自定义验证器中:

class myValidatorMoney extends sfValidatorNumber {

  protected function doClean($value) {
    $clean = $this->processNumber($value); // your logic in this function
    if($clean === false) { // if not possible to process
      throw new sfValidatorError($this, 'invalid', array('value' => $value));
    }
    return parent::doClean($clean);
  }
}

通过这种方式,它可以更好地使用symfony表单,updateXXXColumn()可以使用有效值,但是对于无效输入,您可以做的不多。

答案 1 :(得分:0)

我找到了sfFormDoctrine类的源代码:http://trac.symfony-project.org/browser/branches/1.4/lib/plugins/sfDoctrinePlugin/lib/form/sfFormDoctrine.class.php。那里有一个片段:

153   /**
154    * Processes cleaned up values with user defined methods.
155    *
156    * To process a value before it is used by the updateObject() method,
157    * you need to define an updateXXXColumn() method where XXX is the PHP name
158    * of the column.
159    *
160    * The method must return the processed value or false to remove the value
161    * from the array of cleaned up values.
162    *
163    * @see sfFormObject
164    */
165   public function processValues($values)

表示应该在学说表单类中实现updateXXXColumn()方法。所以我做了:

// lib/form/doctrine/XxxForm.class.php
+  protected function updateAmountColumn($value)
+  {
+    return Tools::processMoneyStrToFloat($value);
+  }

完美无缺。