Symfony 1.4 Propel Сохранить EmbedForm отношения один-к-одному
У меня есть две таблицы, и вот как выглядит схема:
customer:
id:
username: { type: varchar, size: 50, required: true }
password: { type: varchar, size: 50, required: true }
hash: { type: varchar, size: 50, required: true }
customer_profile:
id: { type: integer, foreignTable: customer, foreignReference: id, primaryKey: true, required: true, onDelete: cascade, onUpdate: cascade}
country: { type: varchar, size: 80, required: true }
state: { type: varchar, size: 80, required: true }
city: { type: varchar, size: 80, required: true }
zip: { type: varchar, size: 80, required: true }
customer_info:
id: { type: integer, foreignTable: customer, foreignReference: id, primaryKey: true, required: true, onDelete: cascade, onUpdate: cascade}
preference: { type: longvarchar }
likes: { type: longvarchar }
В настоящее время я использую администратор Symfony 1.4 (propel orm), но не могу успешно объединить все эти три формы в одну.
public function configure()
{
$use_fields = array(........);
$sub_form1 = new CustomerProfileForm($this->getObject()->getCustomerProfile());
$this->embedForm('profile', $sub_form1);
array_push($use_fields, 'profile');
$sub_form1->widgetSchema->setNameFormat('customer_profile[%s]');
$sub_form2 = new CustomerInfoForm($this->getObject()->getCustomerInfo());
$this->embedForm('info', $sub_form2);
array_push($use_fields, 'info');
$sub_form2->widgetSchema->setNameFormat('customer_info[%s]');
$this->useFields($use_fields);
}
public function save($conn = null){
if ($forms === NULL)
{
$forms = $this->getEmbeddedForms();
}
$forms['profile']->getObject()->setId($this->getObject()->getId());
$forms['profile']->save();
$forms['info']->getObject()->setId($this->getObject()->getId());
$forms['info']->save();
$this->getObject()->save();
}
Однако я получаю эту ошибку:
500 | Internal Server Error | sfValidatorErrorSchema
$this->widgetSchema->setNameFormat('customer_profile[%s]');
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
parent::setup();
Я действительно застрял прямо сейчас. Я надеюсь, что кто-то может указать мне правильное направление.
Я просто хочу, чтобы эти три формы были объединены в одну административную форму.
1 ответ
Решение
ValidatorErrorSchema - это просто массив объектов sfValidator, который помогает создать связь с полями формы. Это полное сообщение об ошибке?
Удалите код, где вы переопределите метод save(). Вы должны создать отношения между объектами Propel, прежде чем встраивать их в соответствующие формы, например:
public function configure()
{
$use_fields = array(........);
$profile = $this->getObject()->getCustomerProfile();
// Do you assign profile objects if they don't exist?
if (!$profile) {
$profile = new CustomerProfile();
$profile->setCustomer($this->getObject());
}
$profileForm = new CustomerProfileForm($profile);
$this->embedForm('profile', $profileForm);
array_push($use_fields, 'profile');
$info = $this->getObject()->getCustomerInfo();
// Do you assign info objects if they don't exist?
if (!$info) {
$info = new CustomerInfo();
$info->setCustomer($this->getObject());
}
$infoForm = new CustomerInfoForm($info);
$this->embedForm('info', $infoForm);
array_push($use_fields, 'info');
$this->useFields($use_fields);
}