Symfony - aynı sayfada Çeşitli formu ->

2 Cevap php

I have an issue while displaying several forms of the same model on the same page. The problem is that with the NameFormat, the fields have the same ID :

$this->widgetSchema->setNameFormat('display[%s]');

Görüntüler

<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>

And if you click on the second label, it will activate the first checkbox So I thought I could use the object id to make them unique :

$this->widgetSchema->setNameFormat('display'.$this->getObject()->getId().'[%s]');

Ben parametrelerinin adını bilmiyorum çünkü ama sonra, isteği işleyemiyor.

Bulduğum en iyi seçenek bir kimlik kurmak oldu:

$this->widgetSchema['displayed']->setAttributes(array("id" => "display".$this->getObject()->getId() ));

ama sonra tamamen etiket ve onay kutusunu arasındaki bağlantıları gevşek.

Ben benim etiketin niteliği "için" değiştirmek eğer sorun çözülmüş olacaktır. Biri bunu nasıl biliyor mu? Ya da başka bir seçenek?

2 Cevap

İşte bir fikir ... dinamik, farklı bir ad biçimi ayarı için eylem form sınıfının bir değişken itme:

In your action:

$this->form_A = new displayForm(array(),array('form_id' = 'A')); // pass a form id
$this->form_B = new displayForm(array(),array('form_id' = 'B'));
$this->form_C = new displayForm(array(),array('form_id' = 'C'));

In your form class:

$form_id = $this->getOption('form_id'); // get the passed value
$this->widgetSchema->setNameFormat('display'.$form_id.'[%s]'); // stick it into the name

Bu çirkin ama temiz bir şey ile gelip eminim ...

Çakışan arası formu onay kutusu / etiket etkileşimleri etiketinin id neden olur / nitelikleri için değil kendi adını özelliklere göre.

Yani formun Widget adı biçimini değiştirmek için gerek yoktur ve bu nedenle sorun okuma formu url parametre / gizli girdi olarak talep anahtarını ileterek veya her bir form ve bulgu için düzeninde oluşturulan tüm form adı kombinasyonları dolayarak ya (istek nesne verileri verdikten Bir tane) eşleşen.

sfForm sınıf bunun için sfWidgetFormSchema :: setIdFormat () yöntemi vardır.

// 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' ) );
}