Имам ред от таблица, който бих искал потребителят да може да редактира, като попълни формуляр със своите стойности на запис (име на таблица: Доставчик) и след това изпрати редактираните данни.
Прочетох и препрочетох документацията на 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