मैंने उपयोगकर्ता नाम संपादित करने और अद्यतन करने के लिए एक फॉर्म बनाया है। फॉर्म सही ढंग से काम कर रहा है।

हालांकि, यदि उपयोगकर्ता नाम फ़ील्ड को खाली और सबमिट करें, मान्य फ़ंक्शन "आवश्यक" बंद नहीं होता है और त्रुटि प्राप्त करता है:

"SQLSTATE [२३०००]: अखंडता बाधा उल्लंघन: १०४८ कॉलम 'नाम' शून्य नहीं हो सकता"

मुझे नहीं पता कि सत्यापन क्यों काम नहीं करता है। यहाँ मेरा कोड है।

उपयोगकर्ता नामनियंत्रक.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>

web.php

Route::resource('username','UsernameController',['only' => ['edit', 'update']]);
0
Tieria 14 अप्रैल 2020, 10:06

1 उत्तर

सबसे बढ़िया उत्तर

इसके बजाय निम्नलिखित का प्रयास करें

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'];
0
Foued MOUSSI 14 अप्रैल 2020, 23:22