Я использую модуль MultiForm для отправки длинной формы с помощью SilverStripe. Логика для этой формы находится в 'CampaignBriefForm.php', тогда как поле CMS gridfield добавляется в 'CampaignBriefPage.php'. У меня есть объект данных для CampaignBriefLead, который создает форму.Сетка Поле, не отображающее записей [SilverStripe]
Campaign Brief Page
private static $has_many = array(
'CampaignBriefLeads' => 'CampaignBriefLead'
);
public function CampaignBriefForm() {
return new CampaignBriefForm($this, 'CampaignBriefForm');
}
Campaign Brief Свинец (DO)
private static $has_one = array("Page" => "CampaignBriefPage");
Как вы можете увидеть кампании Краткая страница имеет правильное соотношение с объектом данных, а также вас может видеть, что сама форма (сделанная в файле sepearate) правильно возвращается (поскольку она сохраняется в БД). По какой-то причине, однако, gridfield не покажет мне, что находится в базе данных для этого объекта данных. Код поля сетки выглядит следующим образом.
$fields = parent::getCMSFields();
$contactConfig = GridFieldConfig_RelationEditor::create();
$contactConfig->getComponentByType('GridFieldDataColumns')->setDisplayFields(
array(
'CompanyName' => 'Company Name',
'StartDate' => 'Start Date',
'Duration' => 'Duration',
'WebsiteURL' => 'Website',
'Budget' => 'Budget'
));
$contactGrid = new GridField(
'CampaignBrief',
'Campaign Enquiries',
$this->CampaignBriefLeads(),
$contactConfig
);
$fields->addFieldToTab("Root.Enquiries", $contactGrid);
Для меня это все выглядит правильно и должно работать, но по какой-то причине оно не работает.
Примечание
Ссылку существующий вариант на gridfield позволяет мне связать одну из записей из DO с gridfield Жутко ?? Таким образом, он сохраняет одну запись, но мне нужно сделать это вручную, это говорит мне, что она может видеть БД, но по какой-то причине не потянет.
Для ознакомления с причинами, здесь приведен код мультиформатной формы, где краткое руководство кампании фактически сохраняется в БД после отправки формы.
public function finish($data, $form) {
parent::finish($data, $form);
$steps = DataObject::get(
'MultiFormStep',
"SessionID = {$this->session->ID}"
);
$enquiry = new CampaignBriefLead();
foreach($steps as $step) {
$data = $step->loadData();
foreach($data as $key => $value) {
if($key == 'url' || $key == 'MultiFormSessionID' || $key == 'action_finish') {
continue;
}
if(isset($data[$key])) {
$enquiry->$key = $data[$key];
error_log($data[$key]);
}
}
}
$enquiry->write();
$this->controller->redirect('/campaign-brief/');
}
Если вам нужно что-нибудь еще, дайте мне знать. Благодарю.