簡體   English   中英

為什么在 RegisterController 中創建 function 在 laravel 中不起作用

[英]Why create function in RegisterController is not working in laravel

我是 Laravel 的新手。 我在 Laravel 中使用 registerController 來創建用戶。 用戶數據存儲在用戶表中。

我嘗試過的是:

@extends('adminlte::auth.auth-page', ['auth_type' => 'register'])

@php( $login_url = View::getSection('login_url') ?? config('adminlte.login_url', 'login') )
@php( $register_url = View::getSection('register_url') ?? config('adminlte.register_url', 'register') )

@if (config('adminlte.use_route_url', false))
    @php( $login_url = $login_url ? route($login_url) : '' )
    @php( $register_url = $register_url ? route($register_url) : '' )
@else
    @php( $login_url = $login_url ? url($login_url) : '' )
    @php( $register_url = $register_url ? url($register_url) : '' )
@endif

@section('auth_header', __('adminlte::adminlte.register_message'))

@section('auth_body')<!-- comment -->
<?php $roles = DB::table('roles')->where('id','>',1)->get(); ?>
<div class="login-form">
    <div class="container">
        <div class="row ">
            <div class="register-box">
                <div class="register-box-header">
                    <p class="login-box-msg">{{!empty($type) && $type == 'Agronamist' ? 'Buyer' : ''}} REGISTRATION FORM</p>
                </div>
                <div class="register-box-body register_body">
                    <form method="POST" action="{{ route('register') }}" class="registerForm" enctype="multipart/form-data">
                        @csrf
                        @if(empty($type))
                            <div class="row">
                                <div class="col-md-12 text-center">
                                    <div class="form-group has-feedback">
                                        <select name="role" class="form-control" onchange='window.location.href=window.location.origin+"/register?role="+$(this).val();' required>
                                            <option value="">Select a Role</option>
                                            @foreach($roles as $role)
                                                <option value="{{$role->id}}" {{(count($_GET)>0 && $_GET['role'] == $role->id) ? 'selected' : ''}}>{{$role->name}}  </option>
                                            @endforeach
                                        </select>
                                    </div>
                                </div>
                            </div>
                        @else
                            <input type="hidden" name="role" value="2">
                            <input type="hidden" name="type" value="{{$type}}">
                        @endif
                        @if(count($_GET)>0 && $_GET['role'] != '')
                            <?php $states = DB::table('states')->orderBy('name','asc')->get();?>
                            <div class="row">
                                <div class="col-md-6">
                                    <div class="form-group has-feedback">
                                        <input type="text" class="form-control" placeholder="First Name *" name="first_name" value="{{ old('first_name') }}" required>
                                        <span class="glyphicon glyphicon-user form-control-feedback"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group has-feedback">
                                        <input type="text" class="form-control" placeholder="Last Name *" name="last_name" value="{{ old('last_name') }}" required>
                                        <span class="glyphicon glyphicon-user form-control-feedback"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group has-feedback">
                                        <input type="email" class="form-control" name="email" value="{{ old('email') }}" placeholder="Email *" required>
                                        <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group has-feedback">
                                        <input type="text" class="form-control phoneMask" placeholder="Phone *" name="phone" value="{{ old('phone') }}" required>
                                        <span class="glyphicon glyphicon-phone form-control-feedback"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group has-feedback">
                                        <input type="text" class="form-control" placeholder="Address *" name="address" value="{{ old('address') }}" required>
                                        <span class="glyphicon glyphicon-map-marker form-control-feedback"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group has-feedback">
                                        <input type="password" class="form-control @error('password') is-invalid @enderror" name="password" placeholder="Password *" required autocomplete="new-password">
                                        <span class="glyphicon glyphicon-lock form-control-feedback"></span>
                                        @error('password')
                                        <span class="invalid-feedback" role="alert">
                                                    <strong>{{ $message }}</strong>
                                                </span>
                                        @enderror
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group has-feedback">
                                        <input type="password" class="form-control" name="password_confirmation" placeholder="Retype password *" required autocomplete="new-password">
                                        <span class="glyphicon glyphicon-log-in form-control-feedback"></span>
                                    </div>
                                </div>
                                <div class="row">
                                    <div class="col-md-3 col-xs-offset-4 submit_btn">
                                        <button type="submit" class="btn btn-primary btn-block btn-flat">Register</button>
                                    </div>
                                </div>
 @endif
                    </form>

寄存器 Controller

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\manager_group;
use App\User;
use App\UserAddresses;
use App\UserDetails;
use App\UserRoles;
use Auth;
use DB;
use Illuminate\Auth\Events\Registered;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class RegisterController extends Controller
{
    use RegistersUsers;
    
    protected $redirectTo = '/';
    
    public function __construct()
    {
        //$this->middleware('guest');
    }
    
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();
        // dd($this->validator($request->all())->validate());
     
        event(new Registered($user = $this->create($request->all())));

        if (array_key_exists('type', $request->all())) {
            return $this->registered($request, $user) ?: redirect('/buyersList/' . Auth::user()->id)->with('success', 'Registered successfully.');
        } else {
            return $this->registered($request, $user) ?: redirect($this->redirectPath())->with('success', 'Registered successfully. Please wait for the approval to access your account.');
        }
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'first_name' => ['required', 'string', 'max:255'],
            'last_name'  => ['required', 'string', 'max:255'],
            'phone'      => ['required', 'string', 'max:255'],
            'email'      => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password'   => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param array $data
     *
     * @return \App\User
     */
    protected function create(array $data)
    {
        $user = User::create([
            'first_name' => $data['first_name'],
            'last_name'  => $data['last_name'],
            'phone'      => $data['phone'],
            'email'      => $data['email'],
            'password'   => Hash::make($data['password']),
        ]);
    }
}

我的數據沒有插入到用戶表中,當我 dd($user) 時,創建 function 不起作用。 如何使我的代碼工作。 當我嘗試提交數據時,我的頁面顯示的是:

輸出

如果您只是想存儲用戶輸入,這里有一些非常好的基線代碼可以使用。

例如 -

/**
 * Handle an incoming registration request.
 *
 * @param  \Illuminate\Http\Request  $request
 *
 * @return \Illuminate\Http\RedirectResponse
 *
 * @throws \Illuminate\Validation\ValidationException
 */
public function store(Request $request)
{
    $request->validate([
        'first_name' => 'required|string|max:255',
        'last_name'  => 'required|string|max:255',
        'email'      => 'required|string|email|max:255|unique:users',
        'password'   => ['required', 'confirmed', Rules\Password::defaults()],
    ]);

    $user = User::create([
        'first_name' => $request->first_name,
        'last_name'  => $request->last_name,
        'email'      => $request->email,
        'password'   => Hash::make($request->password),
    ]);

    event(new Registered($user));

    Auth::login($user);

    return redirect(RouteServiceProvider::HOME);
}

}

如果您想將您的驗證排除在 controller 之外,您可以創建一個請求來處理您的驗證。

使用 Artisan 命令make:request創建UserStoreRequest.php 從那里您可以驗證用戶的請求,以確保他們擁有您想要的所有數據。

Laravel 在這方面也有一些很好的文檔。 https://laravel.com/docs/8.x/validation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM