Form->input(), * - requirements: boolean, if false is passed the field is skipped * - metafields: fields that are outside of the scope of the form itself - use these to define dynamic form fields, or anything that will feed into the regular fields via JS population * - submit: The submit button itself. By default it will simply submit to the form as defined via the 'model' field */ $this->Form->setConfig('errorClass', 'is-invalid'); $modelForForm = empty($data['model']) ? h(\Cake\Utility\Inflector::singularize(\Cake\Utility\Inflector::classify($this->request->getParam('controller')))) : h($data['model']); $entity = isset($entity) ? $entity : null; $fieldsString = ''; $simpleFieldWhitelist = [ 'default', 'type', 'placeholder', 'label', 'empty', 'rows', 'div', 'required' ]; //$fieldsArrayForPersistence = array(); if (empty($data['url'])) { $data['url'] = ["controller" => $this->request->getParam('controller'), "action" => $this->request->getParam('url')]; } $formRandomValue = Cake\Utility\Security::randomString(8); $formCreate = $this->Form->create($entity, ['id' => 'form-' . $formRandomValue]); $default_template = [ 'inputContainer' => '
{{content}}
', 'inputContainerError' => '
{{content}}
', 'label' => '{{text}}', 'input' => '', 'textarea' => '', 'select' => '', 'checkbox' => '', 'checkboxFormGroup' => '{{label}}', 'formGroup' => '
{{label}}
{{input}}{{error}}
', 'nestingLabel' => '{{hidden}}
{{text}}
{{input}}
', 'option' => '', 'optgroup' => '{{content}}', 'select' => '', 'error' => '
{{content}}
', 'errorList' => '', 'errorItem' => '
  • {{text}}
  • ', ]; if (!empty($data['fields'])) { foreach ($data['fields'] as $fieldData) { if (!empty($fields)) { if (!in_array($fieldData['field'], $fields)) { continue; } } // we reset the template each iteration as individual fields might override the defaults. $this->Form->setConfig($default_template); $this->Form->setTemplates($default_template); if (isset($fieldData['requirements']) && !$fieldData['requirements']) { continue; } $fieldsString .= $this->element( 'genericElements/Form/fieldScaffold', [ 'fieldData' => $fieldData, 'form' => $this->Form, 'simpleFieldWhitelist' => $simpleFieldWhitelist ] ); } } if (!empty($data['metaTemplates']) && $data['metaTemplates']->count() > 0) { $metaTemplateString = $this->element( 'genericElements/Form/metaTemplateScaffold', [ 'metaTemplatesData' => $data['metaTemplates'], 'form' => $this->Form, ] ); } $submitButtonData = ['model' => $modelForForm, 'formRandomValue' => $formRandomValue]; if (!empty($data['submit'])) { $submitButtonData = array_merge($submitButtonData, $data['submit']); } if (!empty($data['ajaxSubmit'])) { $submitButtonData['ajaxSubmit'] = $ajaxSubmit; } $ajaxFlashMessage = ''; if ($ajax) { $ajaxFlashMessage = sprintf( '
    %s
    ', $this->Flash->render() ); } $formEnd = $this->Form->end(); $actionName = h(\Cake\Utility\Inflector::humanize($this->request->getParam('action'))); $modelName = h(\Cake\Utility\Inflector::humanize(\Cake\Utility\Inflector::singularize($this->request->getParam('controller')))); if (!empty($ajax)) { echo $this->element('genericElements/genericModal', [ 'title' => empty($data['title']) ? sprintf('%s %s', $actionName, $modelName) : h($data['title']), 'body' => sprintf( '%s%s%s%s%s%s', empty($data['description']) ? '' : sprintf( '
    %s
    ', $data['description'] ), $ajaxFlashMessage, $formCreate, $fieldsString, empty($metaTemplateString) ? '' : $this->element( 'genericElements/accordion_scaffold', [ 'body' => $metaTemplateString, 'title' => 'Meta fields' ] ), $formEnd ), 'actionButton' => $this->element('genericElements/Form/submitButton', $submitButtonData), 'class' => 'modal-lg' ]); } else { echo sprintf( '%s

    %s

    %s%s%s%s%s%s%s%s%s', empty($ajax) ? '
    ' : '', empty($data['title']) ? sprintf('%s %s', $actionName, $modelName) : h($data['title']), $formCreate, $ajaxFlashMessage, empty($data['description']) ? '' : sprintf( '
    %s
    ', $data['description'] ), $fieldsString, empty($metaTemplateString) ? '' : $this->element( 'genericElements/accordion_scaffold', [ 'body' => $metaTemplateString, 'title' => 'Meta fields', 'class' => 'mb-2' ] ), $this->element('genericElements/Form/submitButton', $submitButtonData), $formEnd, '

    ', empty($ajax) ? '
    ' : '' ); } ?>