«Введите ошибку: слишком мало аргументов для функции App \ Http \ Controllers \ UserController :: create (), 0 передано и ожидается ровно 1» - PullRequest
0 голосов
/ 18 ноября 2018

У меня проблема с вставкой данных в базу данных. Допустим, у меня есть контроллер с именем 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)
    {
        //
    }
}

Мой файл rout.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 :: Participance (), 0 пройдено и ровно 1 ожидается ". Я новичок в laravel.

Ответы [ 3 ]

0 голосов
/ 18 ноября 2018

Во-первых, вы захотите изменить видимость create и validator:

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');
0 голосов
/ 17 мая 2019
 Route::delete('/file/{id}','FileController@destroy')->name('deletefile');


Надеюсь, это будет полезно

0 голосов
/ 18 ноября 2018

Вы используете запрос get для вызова функции create.

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

Таким образом, вы не передаете данные этому контроллеру.Отсюда и ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...