我对sfWidgetFormDoctrineChoice
和sfValidatorDoctrineChoice
有疑问。无论我对此做什么,表单保存时都会出现“无效”错误。
这是一个'配方'应用程序,其中包含货架上的零件,用于创建另一个零件的成分,用于混合成分的流程以及每个流程中的步骤。我的架构如下:
Part (1) ------- Ingredient (many)
Part (1) ------- Process (many)
Process (1) ------ Step (many)
Step (many) ----- Ingredient (1) -- this is called a 'Charge' and is referenced by Step.charge_id
我在StepForm中添加了代码,为charge_id设置小部件和验证器架构,并在设置表单时调用它。查询使用该过程从部件中获取成分列表。选择列表填充正确,但无论我做什么,验证都会给我一个错误,即使使用sfValidatorPass。
代码如下:有Doctrine和非Doctrine版本,两者都不起作用。 sfValidatorPass也不起作用,这意味着发生了一些奇怪的事情。
我可以做些什么来调试和解决这个问题?
主义版本:
$query =
IngredientTable::getInstance()->getFindByProcessIdQuery($process ? $process->getId() : null);
$this->widgetSchema['charge_id'] =
new sfWidgetFormDoctrineChoice(
array('model' => $this->getRelatedModelName('Charge'),
'query' => $query,
'default' => $this->object->charge_id,
'add_empty' => true) );
$this->validatorSchema['charge_id'] =
new sfValidatorDoctrineChoice(
array('model' => $this->getRelatedModelName('Charge'),
'query' => $query,
'required' => false) );
非教条版
$choices = array(null => null);
$ingredients = IngredientTable::getInstance()->findByProcessId($process ? $process->getId() : null);
foreach ($ingredients as $ingredient) {
$choices[$ingredient->getId()] = $ingredient->__toString();
}
$this->widgetSchema['charge_id'] =
new sfWidgetFormChoice(array('choices' => $choices));
$this->validatorSchema['charge_id'] =
new sfValidatorChoice(array('choices' => $choices,
'empty_value' => $this->getObject()->getChargeId(),
'required' => false));