У меня есть строка таблицы, которую я хотел бы, чтобы пользователь мог редактировать, заполнив форму своими значениями записи (имя таблицы: Поставщик), а затем отправив отредактированные данные.
Я читал и перечитывал документацию Symfony 1.4, но у меня возникли проблемы: 1.) Заполнение полей формы существующими данными записи. 2.) Сохранение отредактированной формы.
Форма ниже — это форма, используемая для создания поставщика, которая, насколько я понимаю, приемлема для редактирования существующей записи.
Что касается проблемы № 1, я попытался перенести существующие значения записи (в действии __construct()
) в форму, а затем установить их в качестве значений по умолчанию, используя $this->setDefaults
, который работает, заполняя входные данные формы при перенаправлении на форма в действии редактирования но затем форма не работает, когда пользователь пытается перенаправить на форму в действии создания, в котором указано, что значения по умолчанию не найдены.
Также стоит отметить, что в этом модуле есть несколько форм. У меня нет проблем с созданием записей с помощью форм, я редактирую только их значения после создания.
Любое направление или предложения?
Код ниже.
Контроллер:
public function executeVendorEdit(sfWebRequest $request)
{
$ind_vendor = VendorPeer::retrieveByPK(($request->getParameter('id')));
$this->form = new VendorCreateForm(array('name' => $ind_vendor));
if ($request->isMethod('post')) {
$this->form->bind($request->getParameter('vendor'));
if ($this->form->isValid()) {
$vendor = $this->form->save();
$this->redirect('catalog/vendorEdit?id=' . $vendor->getId());
}
}
$this->setTemplate('vendorEdit');
}
Форма:
class VendorCreateForm extends SmartForm
{
protected $is_authenticated = null;
public function __construct($is_authenticated = false)
{
$this->is_authenticated = $is_authenticated;
parent::__construct();
}
public function setup()
{
$this->setWidgets(array(
'name' => new sfWidgetFormInput(array(),
array('class' => 'form-control')),
'contact_name' => new sfWidgetFormInput(array(),
array('class' => 'form-control')),
'contact_email' => new sfWidgetFormInput(array(),
array('class' => 'form-control')),
'contact_phone' => new sfWidgetFormInput(array(),
array('class' => 'form-control')),
'address1' => new sfWidgetFormInput(array(),
array('class' => 'form-control')),
));
$this->setValidators(array(
'name' => new sfValidatorString(array('required' => true)),
'contact_name' => new sfValidatorString(array('required' => true)),
'contact_email' => new sfValidatorEmail(array('required' => true)),
'contact_phone' => new sfValidatorString(array('required' => true)),
'address1' => new sfValidatorString(array('required' => true)),
));
$this->widgetSchema->setNameFormat('vendor[%s]');
$this->setDefaults(array(
));
parent::setup();
}
}
Ошибка:
Неустранимая ошибка: вызов неопределенного метода VendorCreateForm::save() в /projects/fun-project/src/apps/operations/modules/catalog/actions/actions.class.php в строке 72.