【问题标题】:"Type error: Too few arguments to function App\Http\Controllers\UserController::create(), 0 passed and exactly 1 expected"“类型错误:函数 App\Http\Controllers\UserController::create() 的参数太少,通过了 0,预期正好 1”
【发布时间】:2019-04-21 02:21:56
【问题描述】:

我在将数据插入数据库时​​遇到问题。假设我有一个名为 HeroController 的控制器,我想创建一个新的英雄对象并将其作为新英雄插入到我的数据库中。

我的控制器包含以下方法:

<?php

namespace App\Http\Controllers;

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

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
//        return response()->json([
//            'name' => 'Abigail',
//            'state' => 'CA'
//        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6',
        ]);
    }
    public function create(array $data)
    {

        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data[password]),
        ]);
    }
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $user = $request->isMethod('put');

        $user = new User;
        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = $request->password;
        $user->save();

        return response()->json($usere, 201);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

我的 routes.php 文件:

<?php

/*
|--------------------------------------------------------------------------
| 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::get('/users/create', 'UserController@create');

这是我得到的错误。类型错误:函数 App\Http\Controllers\UserController::attendance() 的参数太少,通过了 0,预期正好是 1”。我是 laravel 的新手。

【问题讨论】:

  • array $data 来自哪里?在create 函数中。

标签: php mysql database laravel


【解决方案1】:
 Route::delete('/file/{id}','FileController@destroy')->name('deletefile');


希望对你有帮助

【讨论】:

    【解决方案2】:

    首先,您需要更改createvalidator 的可见性:

    protected function create(array $data)
    

    以及验证器方法:

    protected function validator(array $data)
    

    然后您需要将您的 /users/create 路由更改为 post 并使用 store 方法:

    Route::post('/users/create', 'UserController@store');
    

    在您的 UserController 中,将您的 store 方法更新为:

    public function store(Request $request)
    {
        // validate the request
        $validator = $this->validator($request->all());
    
        if ($validator->fails()) {
            return response()
            ->json(422,$validator->errors()->messages());
        }
    
        $user = $this->create($request->all());
    
        return response()->json($user, 201);
    }
    

    如果您需要某种形式来注册或创建用户,请在控制器中添加一个附加方法:

    public function register()
    {
        return view('user.register');
    }
    

    然后定义另一个get路由:

    Route::get('/users/register', 'UserController@register');
    

    【讨论】:

    • 谢谢!但是我如何获得 JSON 回复而不是视图? (注册方法)
    • 为什么需要一个 json 响应来显示一个表单来注册用户? json 响应将来自您的 store 方法。
    【解决方案3】:

    您正在使用 get 请求调用 create 函数。

    Route::get('/users/create', 'UserController@create');
    

    因此,您没有将任何数据传递给该控制器。因此出现错误。

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 2019-10-29
      • 2020-04-22
      • 2019-07-06
      • 2020-12-11
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多