【问题标题】:Laravel: Too few arguments to function 0 passed and exactly 1 expected"Laravel:传递的函数 0 的参数太少,而预期的正是 1”
【发布时间】:2021-09-19 21:28:31
【问题描述】:

我知道以前有人问过这个问题。我看过问题和答案,但找不到我可以从中获得帮助的东西。

我正在尝试将简单数据传递到我的数据库中。到目前为止,一切都很好。 我相信当我尝试添加用户 ID 时会出现我的问题,因为它必须从 Auth 中提取。所以这是我的控制器代码。

side node ,userID 来自名为 users 的外部表。 userID 将用作外键。在用户表中它称为“id”

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ShopController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function index()
    {
        return view('/shop/addShop');
    }


    protected function validator(array $data)
    {
        return Validator::make($data, [
            'userid' => ['required', 'string', 'max:255'],
            'shopname' => ['required', 'string', 'max:255'],
            'address' => ['required', 'string', 'max:255'],
            'postal' => ['required', 'string', 'max:255'],
            'city' => ['required', 'string', 'max:255'],
            'phone' => ['required', 'string', 'max:255'],
        ]);
    }

    /**
     * Add Users shop  after a validation check.
     *
     * @param  array  $data
     * @return \App\
     */
    protected function create(array $data)
    {
        $userId = Auth::id();
        return User::create([
            'userid'=> $data[$userId],
            'shopname' => $data['shopname'],
            'address' => $data['address'],
            'postal' => $data['postal'],
            'city' => $data['city'],
            'phone' => $data['phone'],

        ]);
    }
}

在这里你可以看到我的路线。

<?php 

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

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
Route::post('/addShop', 'ShopController@create')->name('addShop');
Route::get('/addShop', 'ShopController@index')->name('addShop');

【问题讨论】:

  • 尝试将protected function create(array $data)改为protected function create(Request $data)
  • 这样做会引发以下错误: "Class 'App\Http\Controllers\Auth' not found" 。我不允许从另一个控制器调用 Auth 吗?
  • use Auth; 添加到您的班级或将Auth::id() 替换为auth()-&gt;user()-&gt;id
  • 是的,所以一个新的错误,现在它无关我在这里得到一个错误。 return user ::create([ .errror -> Class 'App\Http\Controllers\User' not found" 所以是的,它找不到用户.. 我应该在那里添加什么?
  • App\User 添加到您的班级。

标签: laravel arguments


【解决方案1】:

使用请求

您的 create 函数需要一个数组。然而,Laravel 正在传递一个 POST 请求。因此,请改用 Request 类。您的代码应为:

namespace App\Http\Controllers;
use User;
use Illuminate\Http\Request;

protected function create(Request $data)
    {
        $userId = Auth::id();
        return User::create([
            'userid'=> $data[$userId],
            'shopname' => $data['shopname'],
            'address' => $data['address'],
            'postal' => $data['postal'],
            'city' => $data['city'],
            'phone' => $data['phone'],

        ]);
    }

【讨论】:

  • 你好,是的,我已经按照你上面的要求做了。我现在的问题是返回用户。它找不到用户。我知道它找不到它是合乎逻辑的。但是我在那里声明什么?
  • 更新了答案,你只需要通过添加“use User;”来导入User类到顶部
  • 你好。即使我添加了使用用户,我仍然得到这个“找不到类'用户'”。
  • 你真的创建了用户模型吗?
  • 我应该有,将其更改为应用程序/用户,我得到了一个新错误。 “SQLSTATE[HY000]:一般错误:1364 字段‘fname’没有默认值(SQL:插入usersupdated_atcreated_at)值(2019-01-10 11:21:59) , 2019-01-10 11:21:59)) 它试图在用户表中添加数据。我要使用的表不是用户是商店
【解决方案2】:

我的项目出现这个错误是因为这行代码 Auth::guard()-&gt;logoutOtherDevices();我只是评论它,我的注销功能正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2019-01-23
    • 2021-03-29
    • 2019-10-29
    相关资源
    最近更新 更多