【问题标题】:Argument Count error too few arguments to function php Laravel input into a database validationArgument Count error too little arguments to function php Laravel 输入数据库验证
【发布时间】:2022-01-23 14:24:21
【问题描述】:

我创建了一个使用播种器生成的数据库,但是现在我希望用户输入数据并允许我在屏幕上看到它并将其添加到数据库中。

当我输入数据并点击提交时,我也会收到此错误。它说:

ArgumentCountError 函数参数太少 App\Http\Controllers\InventoryController::store(), 1 传入 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Controller.php 在第 54 行,预计正好 2 行

http://localhost/inventories

这是我的路由器,web.php:

<?php

use Illuminate\Support\Facades\Route;

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

Route::get('/inventories', [\App\Http\Controllers\InventoryController::class, 'index'])->name('index');

Route::get('/inventories/create',[\App\Http\Controllers\InventoryController::class, 'create']);

Route::post('/inventories',[\App\Http\Controllers\InventoryController::class,'store']);

这是我的控制器,InventoryController.php:

<?php

namespace App\Http\Controllers;

use App\Models\Inventory;
use Illuminate\Http\Request;

/**
 * Class InventoryController
 */
class InventoryController extends Controller
{
    /**
     * Get the list of inventories.
     *
     * @return \Illuminate\Contracts\View\View
     */
    public function index()
    {
        $inventories = Inventory::all();
        return view('pages.inventories',[
            "inventories" => $inventories
        ]);
    }
    /**
     * @return \Illuminate\Contracts\View\View
     */
    public function create()
    {
        return view('pages.inventories.create');
    }
    /**
     * @param StorePostRequest $request
     *
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(Request $request, $inventory)
    {
        $validated = $request->validate();
        $request->validate([
            'title'=> 'required|string',
            'description'=> 'required|value:300',
            'price' => 'required|integer|min:0',
            'in_stock' => 'required|integer',
            'on_sale' => 'required|boolean'
        ]);
        $inventory = $request->query('title');
        $inventory = $request->query('description');
        $inventory = $request->query('price');
        $inventory = $request->query('in_stock');
        $name = $request->query('on_sale');

        return redirect()->route('/inventories');
    }
}

这是我的 Inventory.php 模型:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Inventory extends Model
{
    use HasFactory;

    /**
     * @var array
     */
    protected $casts = [
        'on_sale' => 'boolean',
    ];
    /**
     * @var string[]
     */
    protected $fillable = [
        'title',
        'description',
        'price',
        'in_stock',
        'on_sale',
        'updated_at',
        'created_at'
    ];
    protected $guarded = [];
}

这是我的 create.blade.php 文件,用户可以在其中输入数据(工作正常,但点击提交时出错):

@extends('layouts.app')

@section('title', 'Create Inventory')

@section('content')
    <h1><strong>Please fill in the blanks to create an inventory.</strong></h1>
    <p><a href="/">Click here</a> to go back to the homepage.</p>
    <p><a href="/inventories">Click here</a> to go to the generated inventory page.</p>

    <form action="/inventories" method="post">
        @csrf
        <label for="title">Enter an item name:</label>
        <input type="text" name="title" required /><br><br>

        <label for="description">Enter the item's description:</label>
        <textarea name="description" required></textarea><br><br>

        <label for="price">Enter the item's price:</label>
        <input type="number" name="price" required/><br><br>

        <label for="in_stock">Enter a number of items in stock:</label>
        <input type="number" name="in_stock" required/><br><br>

        <label for="on_sale">Enter yes/no if item is on sale:</label>
        <input type="text" name="on_sale" required/><br><br>
        <button type="submit">Submit</button>
    </form>
@endsection

任何帮助都会很有用,因为我完全不知所措。我只想显示用户在库存页面上输入的数据,然后添加一条消息,说明它是否有效,以便用户知道。谢谢!

【问题讨论】:

  • 你能更好地解释你的目标是什么吗?对我来说不是那么清楚
  • 是的,当然。当用户输入数据并点击提交时,我希望弹出一条消息,说明它是否成功,并在浏览器上显示他们输入的内容。
  • 你看到了吗? laravel.com/docs/8.x/…
  • 并且,如果出现问题,只需使用 @old stackoverflow.com/questions/33652814/… 重新加载相同的视图(编辑/创建)

标签: php laravel validation


【解决方案1】:

你的 store 方法需要一个 $inventory 传递给它:

public function store(Request $request, $inventory)

但您的路线没有定义名为 $inventory 的路线参数:

Route::post('/inventories',[\App\Http\Controllers\InventoryController::class,'store']);

所以错误告诉您传递给函数的参数太少(传递了 1 个)(预期为 2 个)。所以先去掉多余的参数:

public function store(Request $request)

然后在方法中创建一个新的清单,然后再开始填充数据:

$inventory = new Inventory();
$inventory = $request->query('title');

【讨论】:

  • 非常感谢您的帮助。我按照你的建议做了,现在我被告知通过了 1 个参数,但预计有两个参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 2015-09-24
  • 2022-01-27
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多