آموزش لاراول؛ قدم به قدم – بخش چهارم ویرایش اطلاعات

ساختار پروژه آموزش لاراول
تا این مرحله از آموزش لاراول نحوه ساخت صفحات و همچنین انتقال اطلاعات واکشی شده از پایگاه داده و نمایش آن بر روی view را بررسی کرده ایم. همچنین نحوه ثبت اطلاعات را توضیح داده ایم. امیدوارم تا این بخش از پروژه با ما همراه بوده باشید و توانسته باشیم دید خوبی در مورد لاراول ایجاد کنیم.
در این بخش نحوه به روزرسانی اطلاعات پایگاه داده را در لاراول بررسی می کنیم.
برای دیدن بخش های قبلی آموزش میتوانید از لینکهای زیر استفاده کنید:
- آموزش لاراول؛ بخش اول – ایجاد پروژه و پایگاه داده، ساختار مدل و ارتباطها
- آموزش لاراول؛ بخش دوم – ایجاد صفحه نمایش تمام اطلاعات
- آموزش لاراول؛ بخش سوم – ثبت اطلاعات
برای به روزرسانی اطلاعات قدمهای زیر را طی میکنیم:
- ساخت صفحه ای برای نمایش اطلاعات یک مورد مشخص از پست وبلاگ با امکان ویرایش و ثبت اطلاعات ویرایش شده
- ایجاد متدی در کنترلر وبلاگ برای نمایش صفحه ویرایش اطلاعات به همراه اطلاعات واکشی شده مربوط به یک پست مشخص از بلاگ
- افزودن دکمه ویرایش اطلاعات به هر یک از گزینه های نمایش تمام اطلاعات
- ایجاد متدی برای ثبت اطلاعات ویرایش شده
- ایجاد روت (route)ها برای هدایت درخواستها به متدهای مشخص
به نظر میرسد تنها بخش جدید در این آموزش واکشی اطلاعات مربوط به یک پست بلاگ مشخص باشد.
نمایش اطلاعات قابل ویرایش یک پست بلاگ
برای این کار کافیست صفحه ایجاد پست جدید را کپی کنید، البته در صورتی که میخواهید برخی فیلدهای قابل ویرایش نباشند میتوانید آنها را حذف کنید یا در زمان نمایش غیر قابل ویرایش کنید.
همچنین کافی است عنوان دکمه هایی مانند ثبت را به ویرایش تغییر دهید.

صفحه ویرایش پست
برای نمایش این صفحه نیاز است امکان هدایت کاربر به این صفحه را ایجاد کنیم. یک روش ایجاد دکمه هایی در صفحه نمایش تمام اطلاعات با عنوان “ویرایش” است که کاربر با فشردن آن به صفحه ویرایش هدایت میشود. همچنین لاراول باید اطلاعات پستی که کاربر درخواست کرده را هم در آن صفحه نمایش دهد.
ایجاد دکمه های ویرایش در صفحه نمایش تمام پستها
برای نمایش این دکمه در صفحه blogpost\all.blade.php تغییراتی به شکل ایجاد میکنیم.

افزودن کلید ویرایش به صفحه نمایش تمام پستها

دکمه ویرایش پستها
همچنین لازم است وقتی کاربر دکمه ویرایش را انتخاب میکند به صفحه ویرایش هدایت شود.
ایجاد route برای نمایش صفحه ویرایش
برای هدایت کاربر به صفحه ویرایش اطلاعات روت زیر را در فایل route.php ایجاد میکنیم.
1 |
Route::get('/post/edit/{post}', ['as' => 'blogpost.edit', 'uses' => 'BlogpostController@edit']); |
این روت یک پارامتر از جنس BlogPost دریافت میکند، لاراول این پارامتر را با ID مربوط به blogpost جایگزین میکند. این کار را Route Model Binding میگویند. بنابراین شما میتوانید تمام یک مدل را به عنوان پارامتر به روت بفرستید، و مطمئن باشید لاراول ID را به query string اضاف میکند. مقداردهی این پارامتر هم در کدی صفحه blogpost\all.blade.php انجام شد.
حال باید متد مربوط به واکشی اطلاعات پست مورد نظر و هدایت کاربر به صفحه ویرایش را ایجاد کنیم.
واکشی اطلاعات پست مشخص
برای واکشی اطلاعات مربوط به یک پست میتوانید از امکانات Eloquent استفاده کنید. این کار را به روش زیر انجام میدهیم.

متد واکشی پست مشخص با شناسه پست
برای اطلاعات بیشتر در مورد واکشی اطلاعات میتوانید مستندات Eloquent را در لارابوک مطالعه کنید.
پس از واکشی اطلاعات کاربر به صفحه نمایش جزییات اطلاعات پست هدایت میشود. اطلاعات را ویرایش میکند و اطلاعات ویرایش شده را ثبت میکند.
ثبت اطلاعات ویرایش شده توسط کاربر
برای ثبت اطلاعات ویرایش شده باید دوباره پست را واکشی کنیم و مقادیر فیلدهای ویرایش شده توسط کاربر را جایگزین مقادیر فیلدهای پیش در پایگاه داده کنیم. برای این کار به روش زیر عمل میکنیم.

متد ویرایش اطلاعات پست
متد update یک پارامتر از جنس Request دریافت میکند. این پارامتر شامل مقادیری است که از طریق فرم ارسال شده اند. در صورتی که فرم ویرایش اطلاعات را بررسی کنید فیلدی با خصوصیت name برابر با Id دارد که شناسه پست را در خود نگاه میدارد.
در پست بعد روش اتصال مدل به فرم را معرفی میکنیم که در آن نیازی به قراردادن فیلد ID در فرم نخواهد بود.
در قدمهای بعدی مقدار فیلدهای پست واکشی شده را برابر با مقدار وارد شده توسط کاربر قرار میدهیم و با استفاده از امکانات Eloquent آن را به روزرسانی میکنیم.
پس از به روزرسانی اطلاعات باید کاربر را به صفحه ای هدایت کنید. این صفحه در اینجا صفحه نمایش تمام پستها انتخاب شده است. برای این کار ما از Redirect::to استفاده کرده ایم. فراموش نکنید آرگومانها مورد نیاز صفحه blogpost\all.blade.php را هم باید بفرستید.
انصراف از ویرایش
برای این کار کافیست به صفحه ویرایش دکمه ای بیافزایید و در صورت انتخاب این دکمه توسط کاربر او را به صفحه نمایش تمام اطلاعات هدایت کنید.
این کار را به عنوان تمرین به شما وامیگذایم. میتوانید نتایج کار خود را در github با fork کردن پروژه لارابلاگ به اشتراک بگذارید. ما نتایج را بررسی میکنیم و بهترین راه حل را به عنوان راه حل نهایی با پروژه اصلی ادغام میکنیم.
همین روش را برای نمایش جزییات پست هم میتوانید استفاده کنید. در بخش بعد در مورد اعتبارسنجی اطلاعات ورودی کاربر و همانطور که پیش از این توضیح دادیم در مورد اتصال فرم به مدل بیشتر صحبت خواهیم کرد.
با سلام و خسته نباشید خدمت شما
اینقدر آموزش ها کامل و خوبه که نتونستم نظر ندم
امیدوارم هر روز بروز تر بشه سایت و با قدرت ادامه بدین
موفق باشید.
ممنون از لطف شما. امیدوارم بتونیم به یادگیری لاراول کمک کنیم
سلام. ممنون از سایت خوبتون.
کلی استفاده کردم. راستش من تو برنامه نویسی وب و لاراول خیلی تازه کارم. دامنه marn.ir رو گرفتم برای وبلاگ نویسی. میخواستم از یه cms لاراولی استفاده کنم که چندتایی پیدا کردم. تقریبا همه مبتنی بر آموزش tuts+ در یوتویوب بود.
https://github.com/Vuedo/vuedo
پیشرفته ترینش این سورسی بود که از گیت هاب ادرس دادم. مشکل اصلیم با فارسی و انگلیسی قاطی شدنش بود. اگر بتونم همین مشکل رو حل کنم تا حد زیادی میشه از همین cms استفاده کرد.
سلام
از شما کمک می خوام و به کمکتون امید دارم.
می تونم توی پروژه از همه امکانات Laravel استفاده نکنم؟ می خوام کم کم برم سراغش
نتونستم یهو همه کارا رو از روش لاراولیش انجام بدم!
یکی دو ساله Codeigniter کار می کنم. به نظرم Laravel خیلی فرق داره. اونقدر که نتونستم کل پروژه رو باهاش بنویسم.تا الآن دو سه تا پروژه رو با لاراول شروع کردم و نتونستم ادامه بدم چون بالاخره یه کاری رو نمی دونستم چطور باید انجام داد.
میشه یه MVC ساده بنویسم؟ بدون این همه پیچیدگی؟
سپاسگزارم
کجاها براتون پیچیده بود؟ کجاها با Codeigniter فرق داشت؟
با سلام و تشکر از مطالب خوبتان،
چند مورد بود که خواستم عرض کنم:
۱٫ برخی کدها آورده نشده و یا توضیح داده نشده اند، مثلا کد view برای ویرایش صفحه، در گیت هم کامل نبود.
۲٫ در کد گیت از Form استفاده شده بود که من مستنداتی در سایت شما برایش نیافتم(https://laravelcollective.com/docs/5.0/html#text)
۳٫ اگر یکسری ریزه کاری ها را هم توضیح میدادید خیلی خوب میشد، (مثلا طریقه نوشتن پارامتر نام view)
سپاس
پس چرا ادامشو ندادید ؟
به زودی ادامه خواهیم داد. یکم مشغله باعث شده نتونیم ادامه بدیم
با سلام خدمت شما
مهندس چرا آموزش رو ادامه ندادین دیگه؟؟؟ 🙁
سلام. به دلیل درگیریهای پروژه ها. انشالله خیلی زود دوباره نوشتن آموزشها و مقاله هارو از سر میگیریم. ممنون از توجهتون
سلام من وقتی laravel5.3 اپلود کردم به این مشکلا برخوردم لطفا راهنمایی کنید
Warning: require(/home/asiaelmc/public_html/blog/vendor/composer/../symfony/polyfill-mbstri ng/bootstrap.php): failed to open stream: No such file or directory in /home/asiaelmc/public_html/blog/vendor/composer/autoload_real.php on line 66
Fatal error: require(): Failed opening required ‘/home/asiaelmc/public_html/blog/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php’ (include_path=’.:/opt/alt/php56/usr/share/pear:/opt/alt/php56/usr/share/php’) in /home/asiaelmc/public_html/blog/vendor/composer/autoload_real.php on line 66