This forum has moved to a new location and is in read-only mode. Please visit talk.octobercms.com to access the new location.
Hello! I would like to set certain fields in controller update method with data coming from a jsonable field.
This is what I got, but unfortunately it doesn't work:
public function update($recordId = null, $context = null)
{
$model = RegistrationFormModel::where('id', '=', $recordId)->first();
if (isset($model->data_fields)) {
// set title and repeater of selected fields
foreach($model->data_fields as $field) {
if (isset($model['_data_fields_' . $field]['data_fields_' . $field . '_title'])) {
$this['_data_fields_' . $field]['data_fields_' . $field . '_title'] = $model['_data_fields_' . $field]['data_fields_' . $field . '_title'];
}
}
}
return $this;
}
Is this even possible how I am doing it?
Hi there,
Try the formBeforeSave
method
public function formBeforeSave($model)
{
if (isset($model->data_fields)) {
// set title and repeater of selected fields
foreach($model->data_fields as $field) {
if (isset($model['_data_fields_' . $field]['data_fields_' . $field . '_title'])) {
$this['_data_fields_' . $field]['data_fields_' . $field . '_title'] = $model['_data_fields_' . $field]['data_fields_' . $field . '_title'];
}
}
}
}
Hello there,
Sorry for my bad description. I wanted to fill my fields with data coming from a jsonable object on update. Anyway, I achieved it :)
Here's my setup in case it helps somebody.
This is my fields.yaml:
fields:
title:
label: Titel
span: full
type: text
info:
label: Informationen
size: large
span: full
type: richeditor
_data_fields:
label: Kursdaten-Felder
type: partial
path: $/creationhandicap/registrationform/models/registrationform/_data_fields.htm
_data_fields_checkbox:
label: Checkboxen
cssClass: data_fields_checkbox
type: nestedform
form:
fields:
data_fields_checkbox_title:
label: Checkboxen Titel
data_fields_checkbox_required:
label: Checkboxen Pflichtfeld
type: checkbox
data_fields_checkbox_repeater:
label: Checkboxen
type: repeater
form:
fields:
label:
label: Label
type: text
_data_fields_radioButton:
label: Radio Buttons
cssClass: data_fields_radioButton
type: nestedform
form:
fields:
data_fields_radioButton_title:
label: Radio Buttons Titel
data_fields_radioButton_required:
label: Radio Buttons Pflichtfeld
type: checkbox
data_fields_radioButton_repeater:
label: Radio Buttons
type: repeater
form:
fields:
label:
label: Label
type: text
This is what I do beforeSave in my model:
public function beforeSave()
{
// get all data
$post = post();
// check if data fields are set
if (isset($post['RegistrationForm']['_data_fields']) && $post['RegistrationForm']['_data_fields'] !== '0') {
$dataFieldsArray = [];
// set selected field checkboxes
$dataFieldsArray['data_fields_selected'] = $post['RegistrationForm']['_data_fields'];
// set title and repeater of selected fields
foreach($post['RegistrationForm']['_data_fields'] as $field) {
if (isset($post['RegistrationForm']['_data_fields_' . $field]['data_fields_' . $field . '_title'])) {
$dataFieldsArray['data_fields_fields'][$field]['title'] = $post['RegistrationForm']['_data_fields_' . $field]['data_fields_' . $field . '_title'];
}
if (isset($post['RegistrationForm']['_data_fields_' . $field]['data_fields_' . $field . '_required'])) {
$dataFieldsArray['data_fields_fields'][$field]['required'] = $post['RegistrationForm']['_data_fields_' . $field]['data_fields_' . $field . '_required'];
}
if (isset($post['RegistrationForm']['_data_fields_' . $field]['data_fields_' . $field . '_repeater'])) {
$dataFieldsArray['data_fields_fields'][$field]['repeater'] = $post['RegistrationForm']['_data_fields_' . $field]['data_fields_' . $field . '_repeater'];
}
}
$this->data_fields = $dataFieldsArray;
}
}
And here I put my data back on update in my controller:
public function formExtendFields($formWidget, $fields)
{
if (isset($formWidget->model->data_fields["data_fields_fields"])) {
foreach($formWidget->model->data_fields["data_fields_fields"] as $key => $field) {
$fieldTitle = "";
if (isset($field["title"])) {
$fieldTitle = $field["title"];
}
$fieldRequired = "";
if (isset($field["required"])) {
$fieldRequired = $field["required"];
}
$fieldRepeater = "";
if (isset($field["repeater"])) {
$fieldRepeater = $field["repeater"];
}
if (isset($fieldTitle) || isset($fieldRequired) || isset($fieldRepeater)) {
$fields["_data_fields_" . $key]->value = [
'data_fields_' . $key . '_title' => $fieldTitle,
'data_fields_' . $key . '_required' => $fieldRequired,
'data_fields_' . $key . '_repeater' => $fieldRepeater
];
}
}
}
return $fields;
}
I really don't know if that could be done prettier. Inputs are very welcome. But it works :)
1-3 of 3