J'essaie d'ajouter quelques règles personnalisées à mon formulaire de création d'étudiant. Je veux créer un étudiant en 3 étapes l'une après l'autre. Si un utilisateur complète les informations à la première étape, seul doit permettre de continuer au 2e et ainsi de suite au 3e et de créer à la fin. Je souhaite obtenir cette fonctionnalité grâce à une validation personnalisée à l'aide du fichier StoreStudentRequest.php.

Je n'ai vraiment rien essayé parce que je suis nouveau sur laravel en ce moment donc j'ai besoin d'aide pour construire la logique de cette fonctionnalité

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-->

Comme vous pouvez le voir dans create.blade.php, j'ai converti le formulaire en 3 étapes. Maintenant, je veux que dans la première étape, l'utilisateur puisse entrer les mots disons du nom au "nom" aux champs "religion", puis si l'utilisateur a rempli ces champs uniquement, passez à l'étape suivante de remplissage d'autres champs, etc. Je souhaite également ajouter une fonctionnalité permettant à l'utilisateur d'enregistrer chaque étape de la base de données si l'utilisateur décide de remplir le formulaire ultérieurement.

S'il vous plait aidez si vous le pouvez

0
Fahad 7 nov. 2019 à 11:17

1 réponse

Vous pouvez écrire une validation personnalisée dans StoreStudentRequest.php.

Soit la partie 1 => nom à la religion /

Soit la partie 2 => l'ethnicité à guardian_residency_type

Je pense que cela peut permettre à l'utilisateur de saisir la première partie et si l'utilisateur commence à remplir l'ethnicité, les autres champs deviendront obligatoires.

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->nationality<> null or $input->guardian_residency_type<> null) and $input->name <> null and $input->dob <> null and $input->gender <> null and $input->religion <> null;
        });
        // you can write here as above for 3rd Part.
        return $v;
    }

}


0
Hayato 7 nov. 2019 à 09:18