Symfony1 动态嵌入表单的更好方法symfony?
我使用Symfony的表单框架已经有一段时间了。但我想知道是否有人有更好的方法来动态嵌入表单 当我嵌入一个表单(见下图)时,问题就出现了,我需要给它一个数组索引,正如Fabian在本文中解释sfForm对象如何像多维数组一样 如果我想让用户能够单击一个按钮并嵌入另一个表单,如果他们多次单击按钮,我如何实现以下目标:Symfony1 动态嵌入表单的更好方法symfony?,symfony1,Symfony1,我使用Symfony的表单框架已经有一段时间了。但我想知道是否有人有更好的方法来动态嵌入表单 当我嵌入一个表单(见下图)时,问题就出现了,我需要给它一个数组索引,正如Fabian在本文中解释sfForm对象如何像多维数组一样 如果我想让用户能够单击一个按钮并嵌入另一个表单,如果他们多次单击按钮,我如何实现以下目标: <input type="parent[child][]" /> <input type="parent[child][]" /> <input typ
<input type="parent[child][]" />
<input type="parent[child][]" />
<input type="parent[child][]" />
我想你可以看看一个医生式的植根关系
即使您不需要在条令表单中嵌入相关记录,它也可能有用。嘿,我找到了一种方法!这里棘手的部分是重写sfWidgetFormSchema::generateName方法
class myWidgetFormSchema extends sfWidgetFormSchema
{
/**
* Generates a name.
*
*/
public function generateName($name)
{
$name = parent::generateName($name);
//match any [number] and replace it with []
$name = preg_replace('/\[\d+\]/','[]', $name);
return $name;
}
}
现在,您只需要将其设置为“包装器”表单。下面是我的“主有许多从”模式示例:
现在您可以轻松地使用jQuery克隆行,而不用担心索引!干杯。这似乎很棒:以我的经验,我只听过AJAX方法——事实上,我现在正在开发这样一个模块。避免这种情况的动机是什么?我意识到在JS代码中可以复制AJAX功能,而不必实际使用AJAX——AJAX所做的只是返回一堆带有表单字段的HTML,例如。不确定这是否解决了您的问题。谢谢。Geeez很抱歉我花了这么长时间才投赞成票。我更喜欢允许用户使用jQuery克隆行。缪奇更好。。。。。
$parentForm = new ParentForm($parent)
$child = new child();
$child->setParent($parent);
$sfForm = new sfForm();
$sfForm ->embedForm($someIndex, new ChildForm($child));
$parentForm->embedForm('child', $sfForm);
class myWidgetFormSchema extends sfWidgetFormSchema
{
/**
* Generates a name.
*
*/
public function generateName($name)
{
$name = parent::generateName($name);
//match any [number] and replace it with []
$name = preg_replace('/\[\d+\]/','[]', $name);
return $name;
}
}
public function configure()
{
$this->getWidgetSchema()->setFormFormatterName('list');
$this->widgetSchema->setNameFormat('master[%s]');
$slavesForm = new sfForm();
$slavesForm->setWidgetSchema(new myWidgetFormSchema);
$slavesCount = $this->getOption('slaves_count', 2);
for ($i = 0; $i < $slavesCount; $i++)
{
$slave = new Slave();
$slave->Master = $this->getObject();
$form = new SlaveForm($slave);
$slavesForm->embedForm($i, $form);
}
$this->embedForm('new_slaves', $slavesForm);
}
public function executeCreate(sfWebRequest $request)
{
$schema = $this->getRequest()->getParameter('master');
$this->form = new MasterNewForm(null, array('slaves_count'=> count($schema['new_slaves'])));
$this->processForm($request, $this->form);
$this->setTemplate('new');
}