Как добавить пользовательскую проверку в мою форму в laravel - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь добавить несколько пользовательских правил в мою форму создания студента. Я хочу создать ученика в 3 шага один за другим. Если пользователь завершает информацию на первом шаге, то следует только разрешить перейти ко 2-му и так далее к 3-му и создать в конце. Я хочу добиться этой функциональности с помощью пользовательской проверки с использованием файла StoreStudentRequest.php.

Я на самом деле ничего не пробовал, потому что я новичок в laravel прямо сейчас, поэтому мне нужна помощь в создании логики для этой функции

StudentController.php

public function store(StoreStudentRequest $request)
    {
        $this->studentRepository->create(
            [
                'bus_id' => $request['bus_id'],
                'room_id' => $request['room_id'],
                'grade_id' => $request['grade_id'],
                'teacher_id' => $request['teacher_id'],
                'passport_no' => $request['passport_no'],
                'passport_expiry' => $request['passport_expiry'],
                //similar fields continues
            ]);

        return redirect()->route('admin.auth.student.index')->withFlashSuccess(__('alerts.backend.students.created'));
    }

StoreStudentRequest.php

class StoreStudentRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [

            'name' => ['required'],
            'dob' => ['required'],
            'gender' => ['required'],
            'religion' => ['required'],
            'ethnicity' => ['required'],
            'nationality' => ['required'],
            'guardian_residency_type' => ['required'],
            'applicant_qid_no' => ['required'],
            'qid_validity' => ['required'],
          //similar fields continue
        ];
    }
}

create.blade.php

<div class="card-body">
                <div role="tabpanel">
                    <ul class="nav nav-tabs" role="tablist">
                        <li class="nav-item">
                            <a href="#step-one" class="nav-link active" aria-controls="step-one" role="tab"
                               data-toggle="tab">@lang('navs.frontend.user.step-one')</a>
                        </li>

                        <li class="nav-item">
                            <a href="#step-two" class="nav-link" aria-controls="step-two" role="tab"
                               data-toggle="tab">@lang('navs.frontend.user.step-two')</a>
                        </li>

                        <li class="nav-item">
                            <a href="#step-three" class="nav-link" aria-controls="step-three" role="tab"
                               data-toggle="tab">@lang('navs.frontend.user.step-three')</a>
                        </li>
                    </ul>
                </div><!--tab panel-->
                <div class="tab-content">
                    <div role="tabpanel" class="tab-pane fade show active pt-3" id="step-one"
                         aria-labelledby="step-one-tab">
                        @include('backend.auth.student.show.tabs.step-one')
                    </div><!--tab panel profile-->

                    <div role="tabpanel" class="tab-pane fade show pt-3" id="step-two" aria-labelledby="step-two-tab">
                        @include('backend.auth.student.show.tabs.step-two')
                    </div><!--tab panel profile-->

                    <div role="tabpanel" class="tab-pane fade show pt-3" id="step-three"
                         aria-labelledby="step-three-tab">
                        @include('backend.auth.student.show.tabs.step-three')
                    </div><!--tab panel change password-->
                </div><!--tab content-->
            </div><!--card body-->

Как вы можете видеть в create.blade.php, я преобразовал форму в 3 шага. Теперь я хочу, чтобы на первом шаге пользователь мог вводить, скажем, от имени до поля «имя» и «религия», а затем, если пользователь только заполнил эти поля, затем перейти к следующему шагу заполнения других полей и так далее. Также я хочу добавить функциональность, чтобы дать возможность пользователю сохранять каждый шаг в базе данных, если пользователь решит заполнить форму позже.

Пожалуйста, помогите, если можете

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

StoreStudentRequest.php

public function rules()
    {
        $rules = [];
        if (request('stage') == 'stage-1') {
            $rules = $this->stage1Rule();
        } else if (request('stage') == 'stage-2') {
            $rules = $this->stage2Rule();
        } else if (request('stage') == 'stage-3') {
            $rules = $this->stage3Rule();
        }
        return $rules;
    }

    private function stage1Rule()
    {
        return [
            'name' => ['required'],
            'dob' => ['required'],
            'gender' => ['required'],
            'religion' => ['required'],
        ];
    }

    private
    function stage2Rule()
    {
        return [
            'ethnicity' => ['required'],
            'nationality' => ['required'],
            'guardian_residency_type' => ['required'],
        ];
    }

    private function stage3Rule()
    {
        return [
            'passport_no' => $request['passport_no'],
            'passport_expiry' => $request['passport_expiry'],
        ];
    }

** Вот как я понял, чтобы установить правила, и он работает нормально для меня в соответствии с моими требованиями. Однако я хотел бы поблагодарить всех, кто способствовал этому. Будьте благословенны!

0 голосов
/ 07 ноября 2019

Вы можете написать пользовательскую проверку в StoreStudentRequest.php.

Пусть часть 1 => имя для религии /

Пусть часть 2 => этническая принадлежность для guardian_residency_type

Я думаюэто может позволить пользователю ввести 1-ую часть, и если пользователь начнет заполнять этническую принадлежность, другие поля станут обязательными.

class StoreStudentRequest extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [

            'name' => ['required'],
            'dob' => ['required'],
            'gender' => ['required'],
            'religion' => ['required'],

          //similar fields continue
        ];
    }
    public function getValidatorInstance()
    {
        $v = parent::getValidatorInstance();
    $v->sometimes(['ethnicity','nationality','guardian_residency_type'],'required', function($input) {
        return ($input->ethnicity <> null or $input->ethnicity <> null or $input->ethnicity <> null) and $input->name <> null and $input->dob <> null and $input->gender <> null and $input->religion <> null;
    });

    $v->sometimes(['applicant_qid_no','qid_validity'],'required', function($input) {
        return ($input->applicant_qid_no <> null or $input->qid_validity <> null) and $input->ethnicity <> null and $input->nationality <> null and $input->guardian_residency_type <> null;
    });

    return $v;
    }

}


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