سلام
من در مورد این مشکل چند جا رو از جمله سایت راکت رو دیدم. منتها جوابهایی که بوده مشکل بنده رو حل نمی کرده. برای همین یه تاپیک جدید زدم.
من اطلاعاتم از جمله یک تصویر رو از یک فرم ساده دریافت می کنم و توسط Teacher::create($request->all());
تو دیتابیس ذخیره می کنم. من می خوام برای انتقال فایل ها به پوشه public از move استفاده کنم. تو این زمینه هم مشکلی نداشتم و فایل رو توی پوشه مخصوصش توی public انتقال می دم. اما توی دیتابیس فیلد pic رو درست ذخیره نمی کنه و آدرس موقت رو ذخیره می کنم.
من می خوام بدونم چطوری می تونم متغیر @request رو از نو مقداردهی کنم و بعد create بزنم. یعنی می خوام بدونم چطوری می تونم متغیر $request رو قبل از اینکه برای ذخیره ارسال کنم ویرایش کنم و مسیری که می سازم رو جایگذاری کنم؟
البته می دونم می تونم یک به یک متغیرها رو با create مقدار دهی کنم اما چون ممکنه تعداد متغیرهام زیاد باشه و مداوم کار مشابه رو انجام خواهم داد نمی خوام یک به یک فیلدها رو مقداردهی کنم و می خوام از all استفاده کنم.
ممنون می شم راهنمایی کنید. تا اینجا هم متد ذخیره م توی کنترلر اینطوریه:
public function store(Request $request)
{
$this->validate($request,[
'file' => 'mimes:jpg,jpeg,png,gif|max:1024'
]);
if ($request->hasFile('pic')){
$patch = 'images/teacherPic';
$file = $request->file('pic');
$uniqueId = uniqid();
$fileName = $uniqueId."-".$file->getClientOriginalName();
$file->move(public_path($patch),$fileName);
$request->get('pic',$patch."/".$fileName);
$request->input('pic');
}
dump($request->all(['pic']));
$data = Teacher::create($request->all());
if($data){
return redirect()->route('teacher.index')->with(['message'=>"اطلاعات دبیر با موفقیت درج شد"]);
};
public function store(Request $request)
{
$this->validate($request,[
'file' => 'mimes:jpg,jpeg,png,gif|max:1024'
]);
$data = $request->except('pic');
if ($request->hasFile('pic')) {
$patch = 'images/teacherPic';
$file = $request->file('pic');
$uniqueId = uniqid();
$fileName = $uniqueId."-".$file->getClientOriginalName();
$file->move( public_path($patch), $fileName );
$data['pic'] = $patch. '/' . $fileName;
}
$data = Teacher::create($data);
return redirect()->route('teacher.index')->with(['message'=>"اطلاعات دبیر با موفقیت درج شد"]);
}
public function store(Request $request)
{
$this->validate($request, [
'file' => 'mimes:jpg,jpeg,png,gif|max:1024'
]);
$data = new Teacher(); // new object form model
$data->fill($request);
$data->save();
if($request->hasFile('pic')) {
$file = $request->file('pic');
$path = $file->store('teacher','public');
$data->pic = $path;
$data->save();
}
if($data) {
return redirect()->route('teacher.index')->with(['message'=>"اطلاعات دبیر با موفقیت درج شد"]);
}
}
شما باید فیلد pic در migration جدول teacher قرار دهید
نیازی نیست ریکوئست رو از نو جایگذاری کنی از یه ارایه استفاده کن
همه مقادیر مورد نظر رو به جا بریز تو ارایه بعد مقدار ادرس عکس رو هم در ادامه تو ارایه ذخیره کن
بعد ارایه رو به متد createبده
با سلام. روش های متنوعی هست که میتونید کاری که میخواین انجام بدین. ( به عنوان تغییر آرایه ریکوئست در لاراول سرچ بزنید)
یک روش این هست که کل آرایه ریکوئست رو در یک آرایه جدید مثلا Data ذخیره کنید و بعد با کلید آرایه مقدار مورد نظر رو تغییر بدید و سپس آرایه رو به متد Create تحویل بدید:
$data = $request->all();
$data['your-image-key'] = $path;
Model::create($data);
یا اینکه از متد merge روی ریکوئست دریافتی استفاده کنید. که نمونش در سایت لاراکست توضیح داده شده که به نظرم راه خوانا تر و تر و تمیز تری هست :)
موفق باشید
public function store(Request $request)
{
$this->validate($request,[
'file' => 'mimes:jpg,jpeg,png,gif|max:1024'
]);
$data = $request->except('pic');
if ($request->hasFile('pic')) {
$patch = 'images/teacherPic';
$file = $request->file('pic');
$uniqueId = uniqid();
$fileName = $uniqueId."-".$file->getClientOriginalName();
$file->move( public_path($patch), $fileName );
$data['pic'] = $patch. '/' . $fileName;
}
$data = Teacher::create($data);
return redirect()->route('teacher.index')->with(['message'=>"اطلاعات دبیر با موفقیت درج شد"]);
}
@oxbir
سلام. کلید آرایه هست. بصورت کلی توی لاراول $request
یک ابجکت از کلاس Illuminate/http/Request
هست . وقتی شما متد all
رو روش صدا میزنید کل ریکوئست های ارسال شده به کنترلر رو بصورت آرایه برمیگردونه.
$data = $request->all();
// محتویات آرایه شامل همه پارامتر های موجود در ریکوئست
$data = [
"_csrf" => "asdasdasd"
"name" => "john"
"family" => "doe"
"image/picture/pic/..." => "upladed image"
];
در واقع کلید آرایه همون ویژگی name هست که برای اینپوت ها توی فرم تعریف میشه. یک نفر ممکن هست اسم اینپوت رو image گذاشته باشه یک نفر picture و ... .
اینطوری با دسترسی به هر عنصر از آرایه با کلیدش میتونید مقادیر ریکوئست رو ویرایش کنید.
موفق باشید 😎
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟