Laravel 5.6 - Registration Form is not working and does not show any error

烂漫一生 提交于 2020-07-21 07:34:08

问题


In one of my recent project, the custom registration form is not working. When I click on the register button, it reloads the registration form, does not print any error and no data is inserted into the database. Here is the look of the registration form:

Here is the migration file code:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('fname');
        $table->string('lname');
        $table->string('email')->unique();
        $table->string('contact');
        $table->string('password');
        $table->string('created_by');
        $table->string('modified_by')->nullable();
        $table->string('userrole');
        $table->rememberToken();
        $table->timestamps();
    });
}

Here is the code of User Model:

protected $fillable = [
    'fname', 'lname', 'email', 'password', 'contact', 'created_by', 'userrole',
];

protected $hidden = [
    'password', 'remember_token', 'modified_by',
];

Here is the code of RegisterController:

protected function create(array $data)
{
    return User::create([
        'fname' => $data['fname'],
        'lname' => $data['lname'],
        'email' => $data['email'],
        'contact' => $data['contact'],
        'created_by' => $data['email'],
        'userrole' => Config::get('constants.ROLE_USER'),
        'password' => Hash::make($data['password']),
    ]);
}

Here is the code of constants.php, which is inside config folder:

<?php
    return array(
        'ROLE_ADMIN' => 'ROLE_ADMIN',
        'ROLE_USER' => 'ROLE_USER'
    );

And finally, here is the code of register.blade.php file:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header bg-dark text-white">{{ __('Register') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('register') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="fname" class="col-md-4 col-form-label text-md-right">{{ __('First Name') }}</label>

                            <div class="col-md-6">
                                <input id="fname" type="text" class="form-control{{ $errors->has('fname') ? ' is-invalid' : '' }}" name="fname" value="{{ old('fname') }}" required autofocus>

                                @if ($errors->has('fname'))
                                    <span class="invalid-feedback">
                                        <strong>{{ $errors->first('fname') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="lname" class="col-md-4 col-form-label text-md-right">{{ __('Last Name') }}</label>

                            <div class="col-md-6">
                                <input id="lname" type="text" class="form-control{{ $errors->has('lname') ? ' is-invalid' : '' }}" name="lname" value="{{ old('lname') }}" required>

                                @if ($errors->has('lname'))
                                    <span class="invalid-feedback">
                                        <strong>{{ $errors->first('lname') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>

                                @if ($errors->has('email'))
                                    <span class="invalid-feedback">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="contact" class="col-md-4 col-form-label text-md-right">{{ __('Contact No') }}</label>

                            <div class="col-md-6">
                                <input id="contact" type="text" class="form-control{{ $errors->has('contact') ? ' is-invalid' : '' }}" name="contact" value="{{ old('contact') }}" required>

                                @if ($errors->has('contact'))
                                    <span class="invalid-feedback">
                                        <strong>{{ $errors->first('contact') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>

                                @if ($errors->has('password'))
                                    <span class="invalid-feedback">
                                        <strong>{{ $errors->first('password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-5">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Register') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
     </div>
</div>
@endsection

Here is a short clip of my problem: Video Clips

So, can anyone help me to figure out, what is the actual problem? How can I solve that problem?

  • Thanks

回答1:


It may be because you have @csrf and not {{ csrf_field }} so the CSRF Token is not get posted.

Also, just for testing you can try to add this to your blade:

@if ($errors->any())    
    <ul>
    @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif

You can also add this to your Controller action to see exactly what is getting posted:

dd(request()->all());

But be aware of any Requests that may be doing any validation on the action




回答2:


Here is the code of RegisterController:

 protected function validator(array $data)
{

    return Validator::make($data, [
        'fname' => 'required|string|max:255',
        'lname' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

protected function create(array $data)
{
    return User::create([
        'fname' => $data['fname'],
        'lname' => $data['lname'],
        'email' => $data['email'],
        'contact' => $data['contact'],
        'created_by' => $data['email'],
        'userrole' => Config::get('constants.ROLE_USER'),
        'password' => Hash::make($data['password']),
    ]);
}


 public function register(Request $request)
   {
        $validation = $this->validator($request->all());
        if ($validation->fails())  {
            return redirect()->back()->with(['errors'=>$validation->errors()->toArray()]);
        }
        else{
            $user = $this->create($request->all());
            Auth::login($user); 
            return redirect('/dashboard')->with(['message'=>'Account Successfully Created.']);
        }
   }

in your blade view :

@if (count($errors) > 0)
  @foreach ($errors->all() as $error)
    <p class="alert alert-danger alert-dismissible fade show" role="alert">{{ $error }}
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
    <span aria-hidden="true">&times;</span>
    </button>
  </p>
  @endforeach
@endif

@if (session()->has('message'))
    <p class="alert alert-success alert-dismissible fade show" role="alert">{{ session('message') }}
  <button type="button" class="close" data-dismiss="alert" aria-label="Close">
    <span aria-hidden="true">&times;</span>
  </button>
  </p>
@endif



回答3:


After you click the register button, if you don't want to reload the page and instead redirect you to somewhere else, and also print a message, try something like this:

protected function create(array $data)
{
    $user = User::create([
        'fname' => $data['fname'],
        'lname' => $data['lname'],
        'email' => $data['email'],
        'contact' => $data['contact'],
        'created_by' => $data['email'],
        'userrole' => Config::get('constants.ROLE_USER'),
        'password' => Hash::make($data['password']),
    ]);

    session()->flash('message', 'Thank you for registering!');

    return redirect()->home();
}



回答4:


It is because you are returning User::create in your controller. You have to redirect to some page like homepage or other page.

If you have a homepage you can do like this in your controller.

protected function create(Request $request)
{
    $data = $request->all();
    $user =  User::create([
        'fname' => $data['fname'],
        'lname' => $data['lname'],
        'email' => $data['email'],
        'contact' => $data['contact'],
        'created_by' => $data['email'],
        'userrole' => Config::get('constants.ROLE_USER'),
        'password' => Hash::make($data['password']),
    ]);

    return redirect('home')->with('message', 'User registered!');;
}

and get message on homepage with this code,

@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif


来源:https://stackoverflow.com/questions/49998255/laravel-5-6-registration-form-is-not-working-and-does-not-show-any-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!