Home > Net >  Laravel : How to create custom Register
Laravel : How to create custom Register

Time:01-10

I have 2 register and login form. The one is used to user and others is used to admin role. In user role, I using from laravel authentication, is good and work well. But, the problem is when I create custom register from admin role, its can't work well. It can't store to database, when I check using echo function, it's not print anything just refresh the page.

Could you help me, what is wrong ???

  • this is my route

    Route::get('/adminregister', 'Auth\LoginController@formreg')->name('admin-reg');
    
  • this is my controller

    namespace App\Http\Controllers\Admin\Auth;
    use App\Http\Controllers\Controller;
    use App\Providers\RouteServiceProvider;
    use App\User;
    use Illuminate\Foundation\Auth\RegistersUsers;
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Support\Facades\Validator;
    use Illuminate\Http\Request;
    
    class AregisterController extends Controller
    {
       
        use RegistersUsers;
       
        public function __construct()
        {
           // $this->middleware('guest');
        }
    
       
        public function create(Request $request)
        {
            
            $this->validate(request(),[
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
                'password' => ['required', 'string', 'min:8', 'confirmed'],
            ]);
         
            if ($request('confirmpassword') == $request('password')){
                $user = User::create(request(['name','email' ,'password','is_admin' => True, ]));
              //  return redirect()->route('admin-login')->with('status', 'Successfully create account');;
            }
            else {
                
                return redirect()->route('admin-reg')->with('status', 'Confirm Password not match');;
            }
        }
    }

In this controller, fisrt I want to check the password will confirmation password then store it to database.

  • this is my view page
<form action ="{{ route('user-create') }}" method="POST" enctype="multipart/form-data" >
                                        <input type = "hidden" name = "_token" value = "<?php echo csrf_token(); ?>">
                                            <div >
                                                <div >
                                                    <div >
                                                        <input  id="inputFirstName" type="text" placeholder="Enter your first name" name="name" />
                                                        <label for="inputFirstName">Name </label>
                                                    </div>
                                                </div>
                                            </div>
                                            <div >
                                                <input  id="inputEmail" type="email" placeholder="[email protected]" name="email"/>
                                                <label for="inputEmail">Email address</label>
                                            </div>
                                            <div >
                                                <div >
                                                    <div >
                                                        <input  id="inputPassword" type="password" placeholder="Create a password" name="password" />
                                                        <label for="inputPassword">Password</label>
                                                    </div>
                                                </div>
                                                <div >
                                                    <div >
                                                        <input  id="inputPasswordConfirm" type="password" placeholder="Confirm password" name="confirmpassword" />
                                                        <label for="inputPasswordConfirm">Confirm Password</label>
                                                    </div>
                                                </div>
                                            </div>
                                            <div >
                                                <div ><button type="submit" >Create account</button></div>
                                            </div>
                                        </form>
                  

Do you have any suggestion of how to fix it? It cant store anything in database, and when I check it using " echo " there is nothing :) Thank you

CodePudding user response:

The confirmed rule is looking for a field name {field}_confirmation. So if you are trying to confirm the 'password' input it would be looking for a field named password_confirmation. So that input in the form needs to be changed to the name password_confirmation.

You won't need to compare the 2 password fields that are submitted since the confirmed rule has done that for you already (that is what it is for; to confirm that they match).

The Request class is not callable, $request(...). That will throw an error since it isn't callable (there is no __invoke method defined on it to make it callable).

To create the User you can get the fields you need easily with the only method:

$request->only('name', 'email', 'password')

You can add your is_admin value to the array returned from the only call:

User::create($request->only('name', 'email', 'password')   ['is_admin' => true])

You will have to make sure that the is_admin field is "fillable" on the Model.

In general you don't need to be calling request() any where in this method since you have a Request instance injected as $request already.

Also, your form isn't handling a file upload so you don't need enctype="multipart/form-data".

  •  Tags:  
  • Related