آموزش ساخت اپلیکیشن مدیریت وظایف با لاراول : قسمت آخر



visibility  
mode_comment   ۰

با قسمت ششم و آخر از سری مقالات آموزشی "آموزش ساخت اپلیکیشن مدیریت وظیفه با لاراول"  در خدمت شما هستیم! در این قسمت ساخت پروژه را با تکمیل بخش ویرایش و حذف تسک ها به پایان می بریم. پس تا پایان این مقاله همراه ما باشید تا اولین پروژه لاراولی خود را به ثمر برسانیم!

آموزش ساخت یک برنامه مدیریت وظیفه با لاراول

آموزش لاراول

در این بخش به تکمیل عملیات CRUD که بخشی از آن را در قسمت قبل کامل کردیم می پردازیم. ابتدا بخش ویرایش را با ساخت ویو و کنترلر به اتمام رسانده و سپس به سراغ قسمت حذف تسک ها می رویم. البته در این قسمت با طریقه استفاده از ورب های PATCH، PUT و DELETE در فرم های لاراول نیز آشنا خواهیم شد.

ویرایش Task ها

به مسیر resources>views رفته و فایل app.blade.php را باز کنید. در قسمت قبل، حلقه تکرار مربوط به تسک ها را ایجاد کردیم. همانطور که مشاهده می کنید در هر تگ li یک فرم مربوط به ویرایش تسک به صورت زیر وجود دارد:

ابتدا باید تمهیدی بیاندیشیم تا ارورها در فرم نمایش داده شوند. برای این کار می توانیم به راحتی از کد آماده ای که در قسمت قبل برای نمایش ارورها ایجاد کردیم استفاده کنیم. کافی است آن را با استفاده از دستور include در جایی از کد فراخوانی کنیم. بنابراین دستور زیر را در هر جایی از کد مثلا داخل فرم ویرایش وارد کنید:

حالا باید URL لازم برای مقدار action فرم ویرایش را تعیین کنیم. برای این کار دوباره از متد route لاراول استفاده می کنیم. پس کد زیر را به جای action فرم ویرایش تسک وارد کنید:

آرگومان اول متد route نام روت مربوط به ویرایش است که مثل قسمت قبل می توانید آن را با استفاده از دستور php artisan route:list به دست آورید. آرگومان دوم متد روت، پارامتر شناسایی تسک است که در لیست روت ها به صورت زیر دیده می شود:

اما منظور از {Task} چیست؟ چطور می توانیم یک تسک را به روتر ارسال کنیم؟ پاسخ استفاده از route model binding در لاراول است. در لاراول به راحتی می توانیم id موجودیت را ارسال کرده و در کنترلر، آبجکت مدل آن را که دارای همه فیلد های رکورد آن در جدول است دریافت کنیم. لاراول کار تبدیل id به آبجکت تسک را برای ما انجام می دهد.

کار بعدی ارسال توکن csrf به همراه درخواست ویرایش است. بنابراین کد زیر را نیز داخل فرم وارد می کنیم:

در آخر باید فرم را برای ارسال درخواست از نوع PUT یا PATCH آماده کنیم. چرا که همانطور که در قسمت های پیشین گفتیم در REST برای ارسال درخواست های ویرایش از این دو متد استفاده می کنیم. اما همانطور که می دانید در فرم های HTML اتریبیوت method نمی تواند مقادیر PUT، PATCH و DELETE را بپذیرد.

اما لاراول برای حل این موضوع چه کاری انجام می دهد؟ برای ارسال درخواست هایی از این دست، لاراول ارسال ورب PATCH و امثال آن را با ایجاد یک فیلد مخفی شبیه سازی می کند. برای ساخت این فیلد مخفی می توانید به راحتی از دستور زیر استفاده کنیم:

می توانید نوع ورب را به راحتی به عنوان آرگومان به متد method_field() ارسال کنیم و بقیه کارها را به لاراول بسپاریم. ما در اینجا از patch استفاده می کنیم. بنابراین کافی است همین کد را در فرم ویرایش تسک وارد کنیم.

آخرین کاری که باید برای آماده سازی فرم ویرایش تسک انجام دهیم پر کردن فیلدهای فرم با مقادیر فعلی تسک است. برای این کار دستور زیر را به جای value فیلد title وارد می کنیم:

و دستور زیر را نیز در داخل فیلد description وارد می کنیم:

در پایان فرم ویرایش شما باید چیزی شبیه به این باشد:

کار ما با ویو تمام شده است. حالا به سراغ متد update() در TaskController بروید! متد update() را به شکل زیر در آورید:

احتیاج داریم که مقادیر وارد شده از فرم ویرایش را اعتبار سنجی کنیم بنابراین مثل بخش ایجاد مقاله که در قسمت قبل توضیح داده شد، به جای کلاس Request از TaskRequest استفاده می کنیم. برای دریافت مقادیر تسک هم همانطور که گفتیم از روش route model binding استفاده می کنیم.

پس به جای استفاده از id برای پیدا کردن تسکی که می خواهیم آن را ویرایش کنیم، از آبجکتی که لاراول پیشاپیش آن را پیدا کرده است استفاده می کنیم. البته فراموش نکنید که نام آبجکت حتما باید هم نام پارامتری باشد که در لیست روت ها تعریف شده است. بنابراین در اینجا نام آبجکت حتما باید $Task باشد. در غیر این صورت عملیات route model binding انجام نمی شود و پارامتر دوم همیشه خالی است.

برای ویرایش کردن تسک مانند بخش ایجاد تسک از روش mass assignment استفاده کرده و $request->all() را به متد update() ارسال می کنیم. در پایان نیز با استفاده از متدهای redirect() و back() به صفحه قبل باز می گردیم. کارهای لازم برای ویرایش تسک ها انجام شده است. کافی است برنامه را اجرا کرده و فرم ویرایش را پر کنید! فرم ویرایش شما آماده استفاده است!

حذف Task ها

خبر خوش اینکه شما به پایان پروژه مدیریت وظایف خود نزدیک می شوید! به عنوان آخرین بخش از عملیات CRUD به سراغ عمل حذف یا Delete می رویم. بنابراین دوباره ویو app.blade.php را باز کنید. در قسمت پایانی هر تسک یک فرم کوچک تعریف شده است که دکمه حذف تسک درون آن قرار دارد:

شاید بپرسید که چرا باید دکمه حذف تسک را درون یک فرم قرار دهیم؟ پاسخ این است که چون قصد داریم درخواست هایی از نوع DELETE ارسال کنیم، مجبوریم که از فرم استفاده کنیم. باید این فرم را بر طبق نیازهایمان تغییر دهیم. در مرحله اول باید اکشن فرم را تعیین کنیم. بنابراین از متد route استفاده می کنیم. کد زیر را به عنوان اکشن فرم وارد نمایید:

متد فرم را نیز به POST تغییر می دهیم. به یک یک فیلد csrf و یک فیلد method نیز احتیاج داریم. بنابراین کد زیر را درون فرم وارد می کنیم تا لاراول بقیه کارها را خود به عهده بگیرد!

همانطور که مشاهده می کنید status یا وضعیت تسک در این فرم نمایش داده می شود. البته باید کاری کنیم که مقدار آن به صورت داینامیک و بر اساس هر تسک تغییر کند. بنابراین تگ span با کلاس task-status را به شکل زیر تغییر می دهیم:

همانطور که می بینید برای قسمت کلاس span مستقیما از فیلد status تسک و برای متن داخل آن از یک شرط switch استفاده کردیم تا متن مناسب را بر اساس مقدار $task->status نمایش دهد. تا اینجا کار فرم حذف در بخش ویو به پایان رسیده است.

حال به متد destroy() در TaskController بروید و آن را به شکل زیر در آورید:

برای دریافت تسکی که باید حذف شود از روش route model binding و برای حذف هر تسک نیز از متد delete() الوکوئنت استفاده کرده ایم. در پایان نیز مثل همیشه با استفاده از متدهای redirect() و back() به صفحه قبل باز می گردیم. بخش حذف نیز آماده شده است! می توانید برای امتحان تسک های مختلفی را ایجاد و حذف کنید.

جمع بندی

به شما تبریک می گوییم! شما با موفقیت اولین اپلیکیشن تان را با لاراول ایجاد کردید! در اینجا سری آموزشی " آموزش ساخت اپلیکیشن مدیریت وظیفه با لاراول " به پایان رسید، اما شما می توانید کم کم به حجم دانسته های خود از لاراول افزوده و به تکمیل بخش های مختلف این پروژه ساده بپردازید. به عنوان مثال می توانید مدیریت زمان را نیز به امکانات مدیریت تسک ها اضافه کنید. حتما نظرات خود را در مورد این سری آموزشی با ما در میان بگذارید. در صورتی که در هر کجای این پروژه با مشکلی مواجه شدید مثل همیشه از پاسخگویی به سوالات شما خوشحال می شویم!

متخصص PHP
اگر دوست داری برنامه نویسی PHP رو حرفه ای یاد بگیری آیا می دانید بیش از ۸۰% وب سایت های موجود در ایران از جمله لیدرهای بازار وب (اسنپ، اسنپ فود، نت برگ، دیجیکالا، الوپیک و ... ) زبان برنامه نویسی PHP را به عنوان زبان اصلی برای پیاده سازی امکانات سمت سرور خود انتخاب کردند! متخصص PHP arrow_back
7Learn Experts
comment دیدگاه کاربران

add_circle ارسال دیدگاه

خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :