500(内部服务器错误)-用户注册系统-Laravel

时间:2019-08-03 06:47:48

标签: javascript php jquery ajax laravel

因此,基本上,我试图在Laravel中创建一个用户注册系统。注册表验证很有效,但是验证通过后,我无法插入数据。相反,我得到了这个错误。任何帮助,将不胜感激。谢谢!

我尝试使用查询生成器插入数据。不幸的是,它仍然无法正常工作。

register-script.js

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$(document).ready(function () {
    $('#btnRegister').click(function (e) {
        e.preventDefault();
        $.ajax({
            url: "/validate-register",
            type: "post",
            data: {
                email: $('#exampleInputEmail1').val(),
                username: $('#exampleInputUsername1').val(),
                password: $('#exampleInputPassword1').val(),
                confirmPassword: $('#exampleInputConfPassword1').val()
            },
            error: function (data) {
                var errMsg = "";
                var response = JSON.parse(data.responseText);
                Object.keys(response.errors).forEach(function(k){
                    errMsg += '<li>' + response.errors[k] + '</li>'
                }) ;
                $('body').css({'overflow': 'visible'});
                $('.alert').css({'display': 'block'});
                $('.alert-danger').html(errMsg);
            },
            success:function(data){
                window.location.href = '/';
            }
        });
    });
});

register-controller.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\DB;
use App\UserModel;

class RegisterController extends Controller
{
    public function Index(){
        return view('register');
    }

    public function ValidateRegister(Request $req){

        $validatedData = $req->validate([
            'email' => 'required|email',
            'username' => 'required',
            'password' => 'required|min:6',
            'confirmPassword' => 'required|same:password'
        ]);   
        if(!$validatedData->fails())
            insertNewUser($validatedData['email'],$validatedData['username'],Hash::make($validatedData['password']));
    }

    public function insertNewUser($email, $username, $password){        
        DB::table('users')->insert([
            'email' => $email,
            'username' => $username,
            'password' => $password
        ]);

        return response()->json(['response' => 'success']);
    }
}

错误消息:

POST http://127.0.0.1:8000/validate-register 500 (Internal Server Error)

Uncaught TypeError: Cannot convert undefined or null to object
    at Function.keys (<anonymous>)
    at Object.error (register-script.js:22)
    at u (app.js:1)
    at Object.fireWith [as rejectWith] (app.js:1)
    at C (app.js:1)
    at XMLHttpRequest.<anonymous> (app.js:1)

1 个答案:

答案 0 :(得分:0)

我没有尝试,但是我认为当您使用$request->validate([rules...])时,它不会返回验证器对象,而是返回已被验证为数组的字段。

因此您的控制器方法应变为:

public function ValidateRegister(Request $req)
{
    $validatedData = $req->validate([
        'email' => 'required|email',
        'username' => 'required',
        'password' => 'required|min:6',
        'confirmPassword' => 'required|same:password'
    ]);

    return $this->insertNewUser(
        $validatedData['email'],
        $validatedData['username'],
        Hash::make($validatedData['password'])
    );
}

validate方法本身通过返回错误作为响应来处理验证失败的情况

相关问题