Symfony form-> bind терпит неудачу - PullRequest
1 голос
/ 24 мая 2010

Я работаю с несколькими пользовательскими формами, и одна из них не привязывает свои значения в POST. Я использую ту же логику для каждого, и только один из них не работает. Вот код:

    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, и все значения отображаются в запросе POST в Firebug, но после того, как я связал форму, по-прежнему не содержит значений.

EDIT: Да, форма настроена как 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 -->

1 Ответ

2 голосов
/ 26 мая 2010

Проверьте код, сгенерированный в вашем браузере (или firebug) для формы. Значения формы используются, чтобы иметь имя, в соответствии с вашей конфигурацией «формата имени», например:

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

Надеюсь, это решение работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...