Example #1
0
 /**
  * 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
 }
Example #2
0
 /**
  * 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);
 }