Проверка 'требуется' не работает для обновления формы в laravel6 - PullRequest
0 голосов
/ 14 апреля 2020

Я сделал форму для редактирования и обновления имени пользователя. Форма работает правильно.

Однако, если сделать поле имени пользователя пустым и отправить, проверка функции «required» не go отключается и выдает ошибку:

"SQLSTATE [23000]: целостность нарушение ограничения: 1048 Имя столбца не может быть пустым "

Я не могу найти, почему проверка не работает. Вот мой код.

UsernameController. php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use App\User;

class UsernameController extends Controller
{
    public function edit($id)
    {
        $data = User::findOrFail($id);
    return view('username.edit')->with('form',$data);
    }


    public function update(Request $request, $id)
    {

        $this->validate($request, ['name' => 'required']);
        $form = new User;
        $form = User::findOrFail($id);
        $form->name = $request->name;
        unset($form['_token']);
        $form->save();

        return redirect('/home/mypage')->with('status','Updated!');
    }
}

edit.blade. php

<form action="/username/{{$form->id}}" method="post">
@csrf
@method('PUT')
<input type="hidden" name="id" value="{{$form->id}}">

<p>Username<br>
<input type="text" name="name" value="{{$form->name}}"></p>

@error('name')
<p><span style="color:red;">{{$message}}</span></p>
@enderror

<p><input type="submit" value="Update"></p>

</form>

веб. php

Route::resource('username','UsernameController',['only' => ['edit', 'update']]);

1 Ответ

0 голосов
/ 14 апреля 2020

Вместо этого попробуйте следующее

use use Illuminate\Support\Facades\Validator;
//...
$validator = Validator::make($request->all(), [
     'name' => 'required',
]);

if ($validator->fails()) {
     return redirect()->back()
         ->withErrors($validator)
         ->withInput();
}

Редактировать

Также необходимо определить, какие атрибуты модели вы хотите сделать назначаемой массе. Вы можете сделать это, используя свойство $fillable в модели.

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = ['name'];
...