2010-05-24 69 views
1

我正在使用一些自定義窗體,其中一個未綁定它的POST值。我爲每個使用相同的邏輯,並且只有其中一個不工作。下面的代碼:Symfony窗​​體 - >綁定失敗

public function executeMediaFileUpload(sfWebRequest $request) { 
    $this->form = new MediaFileUploadForm(); 

    if (!$request->isMethod('POST')) 
     $psk = $request->getParameter('psk'); 
    else { 
     $this->form->bind($request->getParameter($this->form->getName()), $request->getFiles($this->form->getName())); 
     $this->logMessage('VALUE: ' . $this->form->getValue('version')); 
     $psk = $this->form->getValue('application'); 
    } 

    $this->logMessage('PSK: ' . $psk); 
    $app = Doctrine::getTable('Application')->find(array($psk)); 
    $this->form->setDefault('application', $app->getPsk()); 
    $this->form->setDefault('version', $app->getVersion()->getLast()->getPsk()); 

在初始GET,我可以看到通過PSK越來越設置爲默認在生成的HTML應用程序傳遞的值,而所有這些數值在Firebug的POST請求顯示,但在綁定表單後,它仍然不包含任何值。

編輯: 是的,窗體設置爲multipart和POST。我在窗體中調用$ this-> widgetSchema-> setNameFormat('values [%s]')。

EDIT2:這裏是窗體的HTML和GetName僅返回「值」:爲形式

 <form name="mediafiles" action="<?php echo url_for('application/mediaFileUpload') ?>" method="POST" <?php $form->isMultipart() and print 'enctype="multipart/form-data" ' ?> id="applications"> 
    <div class="clear"> 
     <div> 
     <?php echo $form->renderHiddenFields() ?> 
     <?php foreach($form as $widget): ?> 
      <?php if (!$widget->isHidden()): ?> 
       <?php echo $widget->renderLabel() ?> 
       <?php echo $widget->renderError() ?> 
       <?php echo $widget->render() ?> 
      <?php endif ?> 
     <?php endforeach ?> 
     </div> 
    </div> 

     <!-- Start Bottom Sub Navigation --> 
     <div class="subnav clear"> 
      <a href="<?php echo url_for('application/index') ?>">Cancel</a> 
      <a href="<?php echo url_for('application/index') ?>" onclick="document.forms['mediafiles'].submit(); return false;">Upload</a> 
     </div> 
     <!-- End Bottom Sub Navigation --> 
+0

存儲在請求對象中的值是否在正確的數組中能夠使用'$ this-> form-> getName()'? – richsage 2010-05-24 20:43:25

+0

您的HTML表單是否使用:method =「post」enctype =「multipart/form-data」? – Tom 2010-05-24 21:55:57

+0

$ request-> getParameter($ this-> form-> getName())的值是什麼? 該代碼看起來很好,所以我會指着我的手指在表單的HTML不正確。 – johnwards 2010-05-25 07:33:07

回答

2

檢查在您的瀏覽器(或螢火蟲)生成的代碼。表單值使用有個名字,根據你的「名稱格式」的配置,這樣的:

<input type="text" name="my_name_format[widget_name]" /> 
才能訪問其傳遞給操作價值,你必須使用類似這樣

所以:

$parameters = $request->getParameter('my_name_format'); 
$parameter = $parameters['widget_name']; 

對於使用「參數」數組的每個表單值,就像這樣。


的簡單草案貫徹我的解決方案爲您的代碼如下所示:

public function executeMediaFileUpload(sfWebRequest $request) { 
$this->form = new MediaFileUploadForm(); 
$parameters = $request->getParameter('values'); // Since you used $this->widgetSchema->setNameFormat('values[%s]') 

if (!$request->isMethod('POST')) 
    $psk = $parameters['psk']; 
else { 
    $this->form->bind($request->getParameter($this->form->getName()), $request->getFiles($this->form->getName())); 
    $this->logMessage('VALUE: ' . $parameters['version']); 
    $psk = $parameters['application']; 
} 

$this->logMessage('PSK: ' . $psk); 
$app = Doctrine::getTable('Application')->find(array($psk)); 
$this->form->setDefault('application', $app->getPsk()); 
$this->form->setDefault('version', $app->getVersion()->getLast()->getPsk()); 

希望這個解決方案工作。