Я работаю с несколькими пользовательскими формами, и один из них не связывает, это - значения на 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());
На начальной букве ДОБИРАЮТСЯ, я вижу, что значение передало на пути psk устанавливаемый по умолчанию для приложения в сгенерированном HTML, и все значения обнаруживаются в запросе POST в Firebug, но после того, как я связываю форму, это все еще не содержит значений.
Править: Да, форма является установкой как многослойной и POST. И я называю $this-> widgetSchema-> setNameFormat ('значения [%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 -->
Проверьте код, созданный в вашем браузере (или 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());
Надеюсь, это решение работает.