symfony1 学说形式提交 - 在哪里注入逻辑
symfony1 doctrine form submit - where to inject logic
我有一个简单的表格,其中包含一个需要钱的输入,即浮动。到目前为止,它只能接受格式正确的小数,例如12768.56
。注入一些服务器端逻辑的任务(这里没有 javascript)会拦截输入值,比如 12 768,56
,用 12768.56
替换它并让 symfony/doctrine 完成它的工作.转换只是一个例子,我已经得到了我需要的东西,但问题是 - 我应该把拦截函数放在哪里?我想它应该在 XxxForm.class.php 中。但我不知道是哪种方法。 doSave
? processData
?我很确定有一个特别的地方...
我找到了 sfFormDoctrine
class 的源代码: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)
表示应以教义形式 class 实施 updateXXXColumn()
方法。所以我做到了:
// lib/form/doctrine/XxxForm.class.php
+ protected function updateAmountColumn($value)
+ {
+ return Tools::processMoneyStrToFloat($value);
+ }
完美运行。
您应该将这些逻辑放入自定义验证器中:
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()
处理有效值,但是对于无效输入你无能为力。
我有一个简单的表格,其中包含一个需要钱的输入,即浮动。到目前为止,它只能接受格式正确的小数,例如12768.56
。注入一些服务器端逻辑的任务(这里没有 javascript)会拦截输入值,比如 12 768,56
,用 12768.56
替换它并让 symfony/doctrine 完成它的工作.转换只是一个例子,我已经得到了我需要的东西,但问题是 - 我应该把拦截函数放在哪里?我想它应该在 XxxForm.class.php 中。但我不知道是哪种方法。 doSave
? processData
?我很确定有一个特别的地方...
我找到了 sfFormDoctrine
class 的源代码: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)
表示应以教义形式 class 实施 updateXXXColumn()
方法。所以我做到了:
// lib/form/doctrine/XxxForm.class.php
+ protected function updateAmountColumn($value)
+ {
+ return Tools::processMoneyStrToFloat($value);
+ }
完美运行。
您应该将这些逻辑放入自定义验证器中:
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()
处理有效值,但是对于无效输入你无能为力。