首页 > 解决方案 > 请我想在 Laravel 8 中使用不同的表实现多个注册和登录,所有用户表单都在同一页面中(切换按钮)

问题描述

这是 3 个用户(买方、卖方、投资者)的 Register Blade 的 Register Blade 图像 - 使用切换按钮在此处输入图像描述

我想让每个表单指向不同的控制器。每个控制器都专注于一个单独的模型——买方、卖方或投资者。而且我不知道该怎么做,我需要控制器和路由方面的帮助

@extends('layouts.app_register')

@section('content')

    
    <div class="banner" style="background-image: linear-gradient(rgba(0,0,0,0.4),rgba(0,0,0,0.4)), url('/img/carrot.jpg') ;">

        <div id="logo"><a href="{{url('/')}}"><img src="{{ asset('img/logo.jpg') }}"></a> 
       
        </div>
        <div class="form-box">
            <div class="button-box">
                <div id="btn"></div>
                      <button type="button" class="toggle-btn" onclick="buyer()" >Buyer</button>
                      <button type="button" class="toggle-btn" onclick="seller()">Seller</button>
                      <button type="button" class="toggle-btn" onclick="investor()">Investor</button> 
            </div>
            <div class="card black-content">

                <div class="card-body">
                    
                    <form id="buyer" class="input-group" method="POST" action="/buyer" enctype="multipart/form-data">
                        @csrf
                        <div class="row">

                            <div>
                                <input type="text" class="name" name="username" placeholder="Username" required>
                            </div>
                            
                            <div class="col">
                                <input type="text" class="name" name="firstname" placeholder="Firstname" required>
                            </div>
                            <input type="text" class="name" name="middlename" placeholder="Middlename" required>
                            <input type="text" class="name" name="surname" placeholder="Surname" required>
                            <input type="text" class="name" name="phone_no" placeholder="+234" required>
                            <input type="E-MAIL" class="name" name="email" placeholder="E-mail"  required>
                            <input type="password" class="name" name="password" placeholder="Enter password"  required>
                            <input type="text" class="name" name="address" placeholder="Address" required>
                            <input type="checkbox" class="checkbox"><span>I agree to the terms & conditions</span>
                            <button type="submit" name="" class="submit-btn">Register</button>

                        </div>
                    </form>
                </div>



                <div class="">
                    
                    <form id="seller" class="input-group" method="POST" action="{{ route('seller') }}"> 
                        @csrf
                        <div>
                            <input type="text" class="name" name="username" placeholder="Username" required>
                        </div>
                        <input type="text" class="name" name="firstname" placeholder="Firstname" required>
                        <input type="text" class="name" name="middlename" placeholder="Middlename" required>
                        <input type="text" class="name" name="surname" placeholder="Surname" required>
                        <input type="text" class="name" name="phone_no" placeholder="+234" required>
                        <input type="E-MAIL" class="name" name="email" placeholder="E-mail"  required>
                        <input type="password" class="name" name="password" placeholder="Enter password"  required>
                        <input type="text" class="name" name="address" placeholder="Address" required>
                        <input type="checkbox" class="checkbox"><span>I agree to the terms & conditions</span>
                        <button type="submit" class="submit-btn">Register</button>
                    </form>
                    
                </div>





                <div class="">
                    <form id="investor" class="input-group" method="POST" action="" >
                        @csrf
                        <div>
                            <input type="text" class="name" name="username" placeholder="Username" required>
                        </div>
                        <input type="text" class="name" name="firstname" placeholder="Firstname" required>
                        <input type="text" class="name" name="middlename" placeholder="Middlename" required>
                        <input type="text" class="name" name="surname" placeholder="Surname" required>
                        <input type="text" class="name" name="phone_no" placeholder="+234" required>
                        <input type="E-MAIL" class="name" name="email" placeholder="E-mail"  required>
                        <input type="password" class="name" name="password" placeholder="Enter password"  required>
                        <input type="text" class="name" name="address" placeholder="Address" required>
                        <input type="checkbox" class="checkbox"><span>I agree to the terms & conditions</span>
                        <button type="submit" class="submit-btn">Register</button>
                    </form>
                </div>
            </div>

        </div>


    </div>
    <script>
        var x = document.getElementById("buyer")
        var y = document.getElementById("seller")
        var a = document.getElementById("investor")
        var z = document.getElementById("btn")

       
        function buyer(){
            x.style.left = "50px";
            y.style.left = "450px";
            a.style.left = "-400px";
            z.style.left = "0px";

        }
        function seller(){
            x.style.left = "-400px";
            y.style.left = "50px";
            a.style.left = "-400px";
            z.style.left = "110px";

        }
        function investor(){
            x.style.left = "-450px";
            y.style.left = "450px";
            a.style.left = "50px";
            z.style.left = "200px";
          

        }
    </script>


  

@endsection

每个用户的登录页面图片,与注册页面相同 在此处输入图像描述

@extends('layouts.app_login')
 @section('content')

<div class="banner">
    <div id="logo"><a href="{{url('/')}}"><img src="{{ asset('img/logo.jpg') }}"></a> 

    </div>
    <div class="form-box">
        <div id="card-title">
            <h2>LOGIN</h2>
        <div class="underline-title"></div>
    </div>
        <div class="button-box">
            <div id="btn"></div>
                <button type="button" class="toggle-btn" onclick="buyer()" >Buyer</button>
                <button type="button" class="toggle-btn" onclick="seller()">Seller</button>
                <button type="button" class="toggle-btn" onclick="investor()">Investor</button> 
        </div>
        


        <div class="form-div">
                <form id="buyer" class="input-group">
                    <input type="E-MAIL" class="name" placeholder="E-mail"  required>
                    <input type="password" class="name" placeholder="Enter password"  required><br>
                    <a href="#">
                        <legend id="forgot-pass">Forgot password?</legend>
                    </a>
                    <input id="submit-btn" type="submit" name="submit" value="LOGIN" /><br><br>
                        <a href="#" id="signup">Don't have account yet?</a> 
                </form>
        </div>


        <div class="form-div">
                <form id="seller" class="input-group">
                    <input type="E-MAIL" class="name" placeholder="E-mail"  required>
                    <input type="password" class="name" placeholder="Enter password"  required><br>
                    <a href="#">
                        <legend id="forgot-pass">Forgot password?</legend>
                    </a>
                    <input id="submit-btn" type="submit" name="submit" value="LOGIN" /><br><br>
                        <a href="#" id="signup">Don't have account yet?</a> 
                </form>
        </div>


        <div class="form-div">
                <form id="investor" class="input-group">
                    <input type="E-MAIL" class="name" placeholder="E-mail"  required>
                    <input type="password" class="name" placeholder="Enter password"  required><br>
                    <a href="#">
                        <legend id="forgot-pass">Forgot password?</legend>
                    </a>
                    <input id="submit-btn" type="submit" name="submit" value="LOGIN" /><br><br>
                        <a href="#" id="signup">Don't have account yet?</a> 
                    
                </form>
        </div>
        


    </div>


</div>
<script>
    var x = document.getElementById("buyer")
    var y = document.getElementById("seller")
    var a = document.getElementById("investor")
    var z = document.getElementById("btn")


    function buyer(){
        x.style.left = "50px";
        y.style.left = "450px";
        a.style.left = "-400px";
        z.style.left = "0px";

    }
    function seller(){
        x.style.left = "-400px";
        y.style.left = "50px";
        a.style.left = "-400px";
        z.style.left = "110px";

    }
    function investor(){
        x.style.left = "-450px";
        y.style.left = "450px";
        a.style.left = "50px";
        z.style.left = "200px";
    

    }
</script>
@endsection

每个用户的模型样本 - 我使用买方模型,因为其他模型相同

<?php



  namespace App;

   // use Illuminate\Database\Eloquent\Factories\HasFactory;
  use Illuminate\Database\Eloquent\Model;
  use Illuminate\Notifications\Notifiable;
  use Illuminate\Foundation\Auth\User as Authenticatable;

   class Buyer extends Authenticatable


   {

use Notifiable;

    protected $guard = 'buyer';

    // protected $fillable = [
    //     'name', 'email', 'password',
    // ];

    protected $hidden = [
        'password',
    ];

}

Auth.php 包含“守卫”和提供者

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

    'buyer' => [
        'driver' => 'session',
        'provider' => 'buyers',
    ],
    'seller' => [
        'driver' => 'session',
        'provider' => 'sellers',
    ],

    'investor' => [
        'driver' => 'session',
        'provider' => 'investors',
    ],



    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],


    'buyers' => [
        'driver' => 'eloquent',
        'model' => App\Buyer::class,
    ],
    'sellers' => [
        'driver' => 'eloquent',
        'model' => App\Seller::class,
    ],

    'investors' => [
        'driver' => 'eloquent',
        'model' => App\Investor::class,
    ],


],

Kernel.php - 我为每个用户注册中间件的地方

     'buyer' => \App\Http\Middleware\AuthenticateBuyer::class,
    'seller' => \App\Http\Middleware\AuthenticateSeller::class,
    'investor' => \App\Http\Middleware\AuthenticateInvestor::class,

BuyerController.php -与其他用户控制器相同

<?php

namespace App\Http\Controllers;

use App\Buyer;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Auth;

class BuyerController extends Controller
{

// use AuthenticatesUsers;

public function __construct()
{
    // $this->middleware('guest')->except('logout');
    $this->middleware('guest:buyer')->except('logout');

}


public function buyerIndex()
{
    return view('auth.login');
}


public function handleBuyerLogin(Request $req)
{
    $this->validate($req, [
        'email'   => 'required|email',
        'password' => 'required|min:6'
    ]);

    if(Auth::attempt(
        $req->only(['email', 'password'])
    ))
    {
        return redirect()->intended('/');
    }

    return redirect()
        ->back()
        ->with('error', 'Invalid Credentials');
}



public function showBuyerRegisterForm()
{
    
    return view('auth.register');

}

public function registerBuyer(Request $request)
{
    $this->validator($request->all())->validate();
    $regBuyer = Buyer::create([
        'username' => $request['username'],
        'firstname' => $request['firstname'],
        'middlename' => $request['middlename'],
        'surname' => $request['surname'],
        'phone_number' => $request['phone_no'],
        'email' => $request['email'],
        'password' => Hash::make($request['password']),
        'zipcode' => $request['zip_code'],
        'address' => $request['address'],


    ]);
    
    return redirect()->intended('auth/register');
}



}

这是路线 - web.php

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/register-buyer', 'BuyerController@showBuyerRegisterForm');
Route::post('/buyer',          [BuyerController::class, 'registerBuyer']);



Route::get('/register/seller', 'SellerController@showSellerRegisterForm')->name('seller');

标签: phplaravelformsauthenticationmodel-view-controller

解决方案


推荐阅读