با سلام مساله ی این کد چی هست که خطا رو میده تو نت سرچ کردم و چند راه رو تست اما چوابی نگرفتم
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',
سلام میگه این متغیر ($array) باید از نوع ارایه باشه که مثل اینکه کد شما ارایه برنمیگردونه چک کنید دقیقا چی برمیگردونه مثلا با لاگ گرفتن و درستش کنید
مربوط به این کد هست
'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);
}
سلام به شما دوست عزیز.
کدی که شما نوشتین کد کثیف یا به اصطلاح 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 خط کد بنویسیم و یه خروجی بگیریم، هدف باید این باشه که من توسعه دهنده جوری کد بنویسیم که هم دیگران راحت بتونن کد منو بخونن و هم در آینده اگه خواستم کدمو تغییر بدم راحت بتونم این کارو انجام بدم.
امیدوارم مفید بوده باشه.
موفق باشید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟