Symfony form-> bağlaması başarısız olur

1 Cevap php

Ben birkaç özel formlar ile çalışıyorum, ve bunlardan biri bir POST o değerlerini bağlayıcı değildir. Her için aynı mantığı kullanarak yaşıyorum ve sadece bir tanesi çalışmıyor. İşte kod:

    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());

İlk GET, ben psk yoluyla geçirilen değeri oluşturulan HTML uygulama için varsayılan olarak ayarlamak getting görebilirsiniz, ve tüm değerleri Firebug POST isteği göstermek, ama ben form bağlamak sonra, hala hiçbir içeriyor değerleri.

EDIT: Yes, the form is setup as multipart and POST. And I'm calling $this->widgetSchema->setNameFormat('values[%s]') in the form.

EDIT2: İşte form için HTML, ve adAl "değerler" döndürür:

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

1 Cevap

Forma için tarayıcı (veya kundakçı) oluşturulan kodda kontrol edin. Form değerleri bu gibi, "adı biçimi" yapılandırmasına göre, bir isim için kullanın:

<input type="text" name="my_name_format[widget_name]" />

Yani eyleme geçti değerini erişmek için böyle bir şey kullanmak gerekir:

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

Ve "parametreler" dizi kullanarak formun her değer için bu böyle.


Kodunuzu benim çözüm uygulanması basit bir taslak bu gibi görünüyor:

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());

Bu çözüm işe umuyoruz.