【问题标题】:error must be of type array, null given in laravel错误必须是数组类型,在 laravel 中给出 null
【发布时间】:2021-08-01 07:27:15
【问题描述】:

我尝试使用验证器通过 laravel 验证数据,并将其插入到名为 offer 的表中,我确信这是真的,我也使用它来验证 这是我的代码 web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Front\UserController;
use App\Http\Controllers\CrudController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

Route::namespace('Front')->group(function(){
    Route::get('users',[UserController::class,'showAdminName']);
});
Auth::routes(['verify' =>true]);

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home')->middleware('verified');

Route::get('fillable',[\App\Http\Controllers\CrudController::class,'getOffers']);

Route::group(['prefix'=>'offers'],function(){
//    Route::get('store',[CrudController::class,'store']);
    Route::get('create',[CrudController::class,'createview']);
    Route::post('store',[CrudController::class,'store']);
});

CrudController.php

<?php

namespace App\Http\Controllers;

use App\Models\Offer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class CrudController extends Controller
{
    public function getOffers(){
        return Offer::select('id','name')->get();
    }

    public function createview(){
        return view('offers.create');
    }

    public function store(Request $request){
        // validate data
        $validate = Validator::make($request->all,[
            'name' => 'required|min:5|max:10|unique:offers,name',
            'price' => 'required|numeric',
            'details' => 'required'
        ]);
        // insert
        Offer::create([
            'name' => $request->name,
            'price' => $request->price,
            'details' => $request->details,
        ]);
        return back()->with('offer_created','Saved succesfully');
    }
}

create.blade.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous">
    <title>Try laravel</title>
</head>
<body style="background-image: url(https://images.pexels.com/photos/338515/pexels-photo-338515.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260); background-size: cover; ">
    <div class="container" style="padding: 50px;">
        <div class="col-md-6 offset-md-3">
            <div class="card">
                <div class="card-header">
                ADD OFFER
                </div>
                <div class="card-body">
                    @if(Session::has('offer_created'))
                        <div class="alert alert-success">
                            {{ Session::get('offer_created')  }}
                        </div>
                    @endif
                    <form method="POST" action="{{ url('offers\store') }}">
                        @csrf
                        <div class="mb-3">
                            <label for="exampleInputEmail1" class="form-label">Offer Name</label>
                            <input type="text" class="form-control" id="exampleInputEmail1" name="name" aria-describedby="emailHelp">
                        </div>
                        @error('name')
                            <div class="text-danger">
                                {{  $message  }}
                            </div>
                        @enderror
                        <div class="mb-3">
                            <label for="exampleInputPassword1" class="form-label">Offer Price</label>
                            <input type="text" class="form-control" id="exampleInputPassword1" name="price">
                        </div>
                        @error('price')
                        <div class="text-danger">
                            {{  $message  }}
                        </div>
                        @enderror
                        <div class="mb-3">
                            <label for="exampleInputPassword1" class="form-label">Offer details</label>
                            <input type="text" class="form-control" id="exampleInputPassword1" name="details">
                        </div>
                        @error('details')
                        <div class="text-danger">
                            {{  $message  }}
                        </div>
                        @enderror
                        <button type="submit" class="btn btn-primary">Submit</button>
                    </form>
                </div>
            </div>
        </div>
    </div>

    <!-- Scripts -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-p34f1UUtsS3wqzfto5wAAmdvj+osOnFyQFpp4Ua3gs/ZVWx6oOypYoCJhGGScy+8" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.min.js" integrity="sha384-lpyLfhYuitXl2zRZ5Bn2fqnhNAKOAaM/0Kr9laMspuaMiZfGmfwRNFh8HlMy49eQ" crossorigin="anonymous"></script>
</body>
</html>

它给了我这个错误

Illuminate\Validation\Factory::make(): 参数 #1 ($data) 必须是 类型数组,给定空值,调用 C:\xampp\htdocs\starter\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php 在第 261 行

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    正如另一个答案指出的那样,技术解决方案是调用$request-&gt;all()而不是引用$request-&gt;all

    但是,我想解释一下错误消息,因为这是您需要了解的内容,以便将来能够解决类似问题。错误消息告诉您,有一个函数的第一个参数需要传递一个数组,而不是传递null。您可以考虑以下选项:

    • 可以避免在参数与类型不同时调用函数
    • 您可以修改函数的类型期望
    • 您可以将参数转换为正确的类型

    【讨论】:

      【解决方案2】:

      尝试使其 $request->all (to $request->all()

      【讨论】:

        猜你喜欢
        • 2017-09-20
        • 2016-06-05
        • 2022-08-23
        • 2017-05-06
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 1970-01-01
        • 2018-10-07
        相关资源
        最近更新 更多