با سلام مساله ی این کد چی هست که خطا رو میده تو نت سرچ کردم و چند راه رو تست اما چوابی نگرفتم
public function store(Request $request)
{
$data = $request->validate([
'user_id'=> auth()->user()->id,
'title' => ['required','unique:blogs','max:255'],
'body' => ['required'],
]);
$blog=Blog::create($data);
return back();
}
arraykeyfirst(): Argument #1 ($array) must be of type array, int given
سلام به شما دوست عزیز.
کدی که شما نوشتین کد کثیف یا به اصطلاح hard code است، چند نکته خدمتتون عرض میکنم تا کد تمیزتر یا به اصطلاح clean code داشته باشید.
شما نباید اعتبار سنجی رو داخل کنترلر انجام بدید، در واقع باید یه کلاس Request به صورت زیر طبق مستندات لاراول ایجاد کنید.
php artisan make:request StoreBlogRequest
حالا وارد مسیر زیر بشید:
app/Http/Request
و داخل فایل
StoreBlogRequest.php
مقدار return فانکشن authorize رو از false به true تغییر بدین که میشه به صورت زیر:
public function authorize()
{
return true;
}
و فانکشن rules رو به صورت زیر بنوسید:
public function rules()
{
return [
'title' => ['required','unique:blogs','max:255'],
'body' => ['required'],
];
}
حالا داخل کنترلر مربوطه ابتدا کلاس StoreBlogRequest رو use کنید:
use App\Http\Requests\StoreBlogRequest;
و در آخر کنترلر خود رو به صورت زیر بنویسید.
public function store(StoreBlogRequest $request)
{
$data = $request->validated();
auth()->user()->blogs()->create($data);
return back();
}
یه نکته هم لازمه در آخر بهتون بگم و اونم اینه که هدف این نیست که فقط ما بشینیم و 4 خط کد بنویسیم و یه خروجی بگیریم، هدف باید این باشه که من توسعه دهنده جوری کد بنویسیم که هم دیگران راحت بتونن کد منو بخونن و هم در آینده اگه خواستم کدمو تغییر بدم راحت بتونم این کارو انجام بدم.
امیدوارم مفید بوده باشه.
موفق باشید.
درود
زیاد با لاراول آشنایی ندارم
'user_id'=> auth()->user()->id,
اما کد بالا را با این کد جایگزین کنید احتمالا درست بشه
'user_id'=> 'required',نه نشد چون باید این user_id رو از جدول کلربر ها دریافت کنه
شاید پاسخ شما همینجا باشد
مربوط به این کد هست
'userid'=> auth()->user()->id,
mhyeganeh@
endworld@
hesammousavi@
endworld@
rezajahangir@
این مدل blog هست:
class Blog extends Model
{
use HasFactory;
protected $fillable = ['title', 'slug' , 'body'];
public function sluggable(): array
{
return [
'slug' => [
'source' => 'title'
]
];
}
public function user()
{
return $this->belongsTo(User::class);
}
}
و در user
protected $fillable = [
'name',
'email',
'password',
];
public function blogs()
{
return $this->hasMany(Blog::class);
}ممنون از شما آقای جهانگیر خیلی کامل و مفید توضیح دادید.
خیر ببینید.
جواب گرفتم.