Пользовательский запрос пользователя конфликтует с Orchestra \ Html \ Form при проверке - PullRequest
0 голосов
/ 11 октября 2019

Я использую Orchestra Html Form с Laravel 5.8 для создания форм для моей пользовательской CMS. Для проверки пользовательских запросов я создал класс UserRequest, в котором есть правила, сообщения и метод авторизации для проверки отправки формы. Если проверка не удалась, например, по электронной почте. происходит сбой уникальной проверки, вместо возврата к представлению с сообщениями проверки появляется ошибка: метод Orchestra\Html\Form\FormBuilder::__toString() не должен выдавать исключение, перехвачено ErrorException: попытка получить свойство не-объекта. Я также использую форму Orchestra для других моделей, но пользователь - единственный со своим собственным пользовательским запросом и единственной моделью, которая порождает эту проблему, поэтому, я думаю, конфликт должен быть с запросом пользователя. Я не могу понять, что не так.

Я сбросил переменные в представлении, и они кажутся правильными. Метод form() в модели также работает нормально, но когда форма отображается в представлении после ошибки проверки, происходит сбой.

"orchestra/html": "^3.5",
Laravel 5.8

МОДЕЛЬ:

public function form()
{
    return Form::of('users', function ($form) {
        $attributes = [
            'enctype' => 'multipart/form-data'
        ];
        $form->attributes($attributes);
        $form->submit = $this->exists ? 'Guardar' : 'Criar';
        $form->fieldset(function ($form) {
            $form->control('select', 'role', function ($control) {
                $control->field(function ($row) {
                    $val = old('role') ?? $this->roles()->first();
                    return "<select class='form-control input-with-feedback' name='role' required>".Role::selectRole($val)."</select>";
                });
            });
            $form->control('input:text', 'nome', function ($control) {
                $control->field(function ($row) {
                    $val = old('name') ?? $this->name ?? '';
                    return "<input type='text' class='form-control input-with-feedback' name='name' value='".$val."' required>";
                });
            });
            $form->control('input:email', 'email', function ($control) {
                $control->field(function ($row) {
                    $val = old('email') ?? $this->email ?? '';
                    return "<input type='email' class='form-control input-with-feedback' name='email' value='".$val."' required>";
                });
            });
            $form->control('input:password', 'password', function ($control) {
                $control->field(function ($row) {
                    return "<input type='password' class='form-control input-with-feedback' name='password' value='$row->password' required>";
                });
            });
            $form->control('input:password', 'repetir password', function ($control) {
                $control->field(function ($row) {
                    return "<input type='password' class='form-control input-with-feedback' name='password_confirmation' value='$row->password_confirmation' required>";
                });
            });
            $form->control('input:file', 'avatar', function ($control) {
                $control->field(function ($row) {
                    $default_img = $this->avatar ?? 0;
                    $val = "<input type='file' class='form-control input-with-feedback' name='avatar' ><input type='hidden' name='avatar' value='".$default_img."'>";
                    if ($this->avatar != NULL){
                        $val .= "<label class='col-md-3 control-label d-block mt-2 mb-0'>Imagem atual:</label><img src='".\CompGallery::getImageFullUrl($this->avatar, '_avatar')."'><label class='control-label  mt-2 mb-0 mx-2'>Apagar Imagem</label><input type='checkbox' name='delete_image' value='on'>";
                    }
                    return $val;
                });
            })->label('Avatar'); 
            $form->control('input:checkbox', 'active', function ($control) {
                $control->field(function ($row) {
                    $val = old('active') ? 'checked' : $this->active ? 'checked' : '';
                    if (is_null($this->active)) $val = 'checked';                     
                    return "<label class='switch'><input type='hidden' value='0' name='active'><input type='checkbox' class='form-control input-with-feedback col-md-4' name='active' id='ativo' value='1' ".$val."><span class='slider round'></span></label>";
                });
            })->label('Ativo');
        });
    });
}

ЗАПРОС:

public function rules()
{
    return [
        'role' => 'required',
        'name' => 'required|string|max:50',
        'email' => 'required|string|email|max:50|unique:users,email,'.$this->id,
        'password' => 'required|string|min:8|confirmed',
        'active' => 'required',
    ];
}

/**
 * Get the error messages for the defined validation rules.
 *
 * @return array
 */
public function messages()
{
    return [
        'name.required' => 'O nome é obrigatório',
        'email.required'  => 'O email é obrigatório',
        'email.unique'  => 'O email já existe',
        'password.required'  => 'A password é obrigatória',
        'password.confirmed' => 'As passwords não coincidem'
    ];
}

ПРОСМОТР:

<div class="row">
    <div class="col-md-7 module-form">
        {!! $form !!}
    </div>
</div>

СООБЩЕНИЕ ОБ ОШИБКЕ: Метод Orchestra \ Html \ Form \ FormBuilder :: __ toString () не должен вызывать исключение, пойман ErrorException: Попыткаполучить свойство необъекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...