/** * Bind data to the view. * * @param View $view * * @return void */ public function compose(View $view) { if ($view->group_form_errors and $view->errors->any()) { $view->nest('form_error_content', $view->bsb_pkg_ref . '::form.control.errors', ['errors' => $view->errors->all()]); } foreach ($view->groups as $name => &$input) { if (is_array($input)) { if (count(array_filter(array_keys($input), 'is_string'))) { //The array contains named keys, generate inputs from these options $view_name = $view->bsb_pkg_ref . '::input.' . (empty($input['type']) ? 'text' : $input['type']); if (!view()->exists($view_name)) { $view_name = $view->bsb_pkg_ref . '::input.' . 'text'; } $input = view($view_name, array_merge(compact('name'), $input), $view->getData()); } else { //The array contains html strings, display them together within a form-group $input = view($view->bsb_pkg_ref . '::input.group', ['content' => implode("\n", $input)], $view->getData()); } } elseif (!str_contains($input, '.form-group')) { //The input is just a string of html, but it doesn't contain any .form-group element, so we'll wrap it in one $input = view($view->bsb_pkg_ref . '::input.group', ['content' => $input], $view->getData()); } } //TODO: add form-horizontal and form-inline options }
/** * Bind data to the view. * * @param View $view * * @throws \Exception */ public function compose(View $view) { if (empty($view->name) and !str_contains($view->getName(), ['csrf', 'group'])) { //TODO: check if these exceptions can actually be caught. Perhaps it needs to log to file instead? throw new \Exception('Input needs a "name" parameter set in ' . $view->getPath()); } $data['control_id'] = $view->bsb_pkg_ref . $view->form_id . $view->name; //TODO: handle unique id if name is repeated within the form with [] array syntax and radios/checkboxes if (!empty($view->name) and $view->errors->has($view->name)) { $data['has_error'] = true; if (!$view->group_form_errors) { $view->nest('control_error_content', $view->bsb_pkg_ref . '::form.control.errors', ['errors' => $view->errors->get($view->name)]); } } if ($view->control_error_content or $view->help_text or $view->html_help_text) { $data['control_description_id'] = $data['control_id'] . 'desc'; } $view->with($data); }