Php Symfony-同一页面上的多个表单->ID问题
在同一页面上显示同一型号的多个表单时出现问题。 问题在于,对于NameFormat,字段具有相同的ID:Php Symfony-同一页面上的多个表单->ID问题,php,symfony1,symfony-1.4,symfony-forms,Php,Symfony1,Symfony 1.4,Symfony Forms,在同一页面上显示同一型号的多个表单时出现问题。 问题在于,对于NameFormat,字段具有相同的ID: $this->widgetSchema->setNameFormat('display[%s]'); 将显示 <form class="update_display_form" id="update_display_0" action="/iperf/web/frontend_dev.php/update_display" method="post"> <
$this->widgetSchema->setNameFormat('display[%s]');
将显示
<form class="update_display_form" id="update_display_0" action="/iperf/web/frontend_dev.php/update_display" method="post">
<input type="checkbox" name="display[displayed]" checked="checked" id="display_displayed" />
<label for="display_displayed">test</label>
</form>
<form class="update_display_form" id="update_display_1" action="/iperf/web/frontend_dev.php/update_display" method="post">
<input type="checkbox" name="display[displayed]" checked="checked" id="display_displayed" />
<label for="display_displayed">truc</label>
</form>
但是我不能处理请求,因为我不知道参数的名称
我发现最好的选择是设置一个ID:
$this->widgetSchema['displayed']->setAttributes(array("id" => "display".$this->getObject()->getId() ));
但是我完全松开了标签和复选框之间的连接
如果我可以更改标签的for属性,问题就会解决。有人知道怎么做吗?还是其他选择?这里有一个想法。。。将变量从动作推送到form类,以动态设置不同的名称格式: 在你的行动中: 在你的课堂上:
这很难看,但我相信你能想出更干净的东西…这里有个主意。。。将变量从动作推送到form类,以动态设置不同的名称格式: 在你的行动中: 在你的课堂上:
这很难看,但我相信你可以想出一些更干净的方法…表单间复选框/标签交互冲突是由标签的id/属性而不是名称属性引起的 因此,不需要修改表单的小部件名称格式,因此通过将请求键作为表单url参数/隐藏输入传递,或者通过循环在布局中为每个表单创建的所有表单名称组合并找到匹配的组合,从请求对象读取提交的数据时会出现问题 sfForm类具有该类的sfWidgetFormSchema::setIdFormat方法
// Creating form instances
$formA = new sfForm();
$formA->getWidgetSchema()->setIdFormat( '%s1' );
$formA->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
$formB = new sfForm();
$formB->getWidgetSchema()->setIdFormat( '%s2' );
$formB->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
$formC = new sfForm();
$formC->getWidgetSchema()->setIdFormat( '%s3' );
$formC->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
// Processing a request data
$form = new sfForm();
... // configure the form
$_formNameRequestKey = $form->getName();
if( $request->hasParameter( $_formNameRequestKey ) ) {
$form->bind( $request->getParameter( $_formNameRequestKey ) );
}
... or just ...
if( $request->hasParameter( 'display' ) ) {
$form->bind( $request->getParameter( 'display' ) );
}
表单间复选框/标签交互冲突是由标签的id/属性而不是名称属性引起的 因此,不需要修改表单的小部件名称格式,因此通过将请求键作为表单url参数/隐藏输入传递,或者通过循环在布局中为每个表单创建的所有表单名称组合并找到匹配的组合,从请求对象读取提交的数据时会出现问题 sfForm类具有该类的sfWidgetFormSchema::setIdFormat方法
// Creating form instances
$formA = new sfForm();
$formA->getWidgetSchema()->setIdFormat( '%s1' );
$formA->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
$formB = new sfForm();
$formB->getWidgetSchema()->setIdFormat( '%s2' );
$formB->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
$formC = new sfForm();
$formC->getWidgetSchema()->setIdFormat( '%s3' );
$formC->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
// Processing a request data
$form = new sfForm();
... // configure the form
$_formNameRequestKey = $form->getName();
if( $request->hasParameter( $_formNameRequestKey ) ) {
$form->bind( $request->getParameter( $_formNameRequestKey ) );
}
... or just ...
if( $request->hasParameter( 'display' ) ) {
$form->bind( $request->getParameter( 'display' ) );
}
我可能会基于模型创建一个新表单,然后简单地给它们不同的名称格式。我不能这样做,因为页面上的表单数量不是固定的。谢谢,我可能会基于这个模型创建一个新表单,然后简单地给它们不同的名称格式。我不能这样做,因为页面上的表单数量不是固定的。谢谢,不过这很有趣,谢谢。但是,当我处理表单时,如何获取已提交的表单ID?目前我使用$request->getParameter'display';但是如果名称是动态分配的。。。我可以做:字母_数组=数组'A','B',。。。;一会儿$request->getParameter'display'。letter_array[$i]{$i++}但这开始非常难看不?要获取已提交的表单id,您可以在操作中将'form_id'变量链接到已提交的POST请求,也可以添加一个隐藏的输入字段,通过form类将任何需要的内容提交给它。。。。我认为有一些选择。我没有看到你的评论,这是我能想到的最干净的方式。谢谢这很有趣,谢谢。但是,当我处理表单时,如何获取已提交的表单ID?目前我使用$request->getParameter'display';但是如果名称是动态分配的。。。我可以做:字母_数组=数组'A','B',。。。;一会儿$request->getParameter'display'。letter_array[$i]{$i++}但这开始非常难看不?要获取已提交的表单id,您可以在操作中将'form_id'变量链接到已提交的POST请求,也可以添加一个隐藏的输入字段,通过form类将任何需要的内容提交给它。。。。我认为有一些选择。我没有看到你的评论,这是我能想到的最干净的方式。谢谢
$form_id = $this->getOption('form_id'); // get the passed value
$this->widgetSchema->setNameFormat('display'.$form_id.'[%s]'); // stick it into the name
// Creating form instances
$formA = new sfForm();
$formA->getWidgetSchema()->setIdFormat( '%s1' );
$formA->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
$formB = new sfForm();
$formB->getWidgetSchema()->setIdFormat( '%s2' );
$formB->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
$formC = new sfForm();
$formC->getWidgetSchema()->setIdFormat( '%s3' );
$formC->getWidgetSchema()->setNameFormat( 'display' );
... // configure the form
// Processing a request data
$form = new sfForm();
... // configure the form
$_formNameRequestKey = $form->getName();
if( $request->hasParameter( $_formNameRequestKey ) ) {
$form->bind( $request->getParameter( $_formNameRequestKey ) );
}
... or just ...
if( $request->hasParameter( 'display' ) ) {
$form->bind( $request->getParameter( 'display' ) );
}