توسعه دهنده ارشد وب
ساخت پکیجها در فریمورک لاراول
به عنوان یک توسعه دهنده PHP، شما ممکن است کارکردن با فریمورک ها را ترجیح دهید. فریمورک ها در کنار کارآیی های بیشماری که دارند، با ساده سازی شیوه های رایج مورد استفاده در اکثر پروژه های توسعه وب مثل پکیج ها، ماژول ها، پلاگین ها و حتی کامپوننت ها، سعی میکنند فرایند توسعه را آسانتر کنند.
شاید در طول فرایند توسعه، این احساس به شما دست دهد که دارید از نو چرخ را اختراع میکنید. برای مثال هنگامی که اپلیکیشنی برای احراز هویت کاربران و یا اعتبارسنجی کاربران مینویسید. این ها جز بخش هایی هستند که تقریبا در بیشتر پروژه های وب کاربرد دارند; در این صورت ما نیاز داریم یک پکیج بسازیم تا بتوانیم توسعه برنامه را سریعتر و راحتتر پیش ببریم و در پروژه های آینده از آن استفاده کنیم.
داستان این نوشته از جایی شروع شد که در یکی از پروژه های کاری، مدیر پروژه از من خواست قابلیتی به سیستم اضافه کنم; که کاربران بتوانند مقالات نوشته شده رو لایک کنند. کار سادهای بود، با ایجاد یک مایگریشن و جدول در دیتابیس و یک مدل و یک رابطه بین جداول به سادگی این قابلیت به پروژه لاراولی ما اضافه شد. مدتی بعد که بخش ویدیوهای پروژه راهاندازی شد، به این نتیجه رسیدیم که قابلیت لایک کردن را باید در این بخش هم پیادهسازی کنیم. پس روشی که قبلا برای انجام این کار استفاده میکردیم، باید تغییر میکرد. ما در کدمون رفرنس های زیادی به فیلد post_id
در جدول likes
داشتیم. پس با بهره گیری از روابط چندریختی (Polymorphism) سیستمی دینامیکتر طراحی کردیم که محدود به یک جدول نباشد و همین سیستم در نهایت به یک پکیج لاراولی تبدیل شد که به راحتی از طریق کامپوزر قابل نصبه. در این نوشته به تشریح مراحل ساخت آن میپردازیم.
فهرست مطالبی که در این نوشته مرور خواهیم کرد:
- نصب لاراول
- ساختار فولدر ها
- فایل کامپوزر
- بارگذاری پکیج در فایل اصلی کامپوزر
- ساخت یک Service Provider برای پکیج
- ساخت فایل مایگریشن
- ساخت مدل برای جدولهای دیتابیس
- به روز رسانی Service Provider برای بارگذاری پکیج
- به روز رسانی فایل کامپوزر
- انتشار پکیج در سرویس Packagist.org (ریپازیتوری اصلی کامپوزر)
- نصب پکیج و استفاده از متدهای آن
- نتیجه گیری
نصب لاراول
از آن جا که پکیجها برای افزودن قابلیتهای جدید به هسته لاراول به کار میروند، اولین کاری که باید انجام دهیم ایجاد یک پروژه لاراولی است. ما نصب لاراول را از طریق کامپوزر (Composer) انجام میدهیم.
برای سایر روشهای نصب میتوانید به مستندات رسمی لاراول مراجعه کنید. مستندات دقیق لاراول سایر گزینه های نصب را نیز به خوبی پوشش داده است.
ساختار فولدر ها
پکیج ها باید دارای ساختار فولدر خاصی باشند . برای به وجود آوردن این ساختار میتوان از ابزارهای کامندلاین مثل Laravel-Packager استفاده کرد. ما فایل ها و پوشه ها را به صورت دستی ایجاد می کنیم تا درک بهتری از چگونگی قرار گرفتن قطعات در کنار هم، داشته باشیم.
داخل فولدر اصلی پروژه لاراول، فولدرهای زیر را به وجود بیاورید.
- وِندور نیم
vendorName
: میتواند نام شما باشد یا نام مشتری و یا سازمانی که شما پکیج را برای آن میسازید. - پکیج نیم
packageName
: مورد واضحیه. اسمی که میخواهید روی پکیج بگذارید.
من در اینجا نام وِندور رو AliBayat
و نام پکیج رو Likeable
قرار دادم. حالا نیاز داریم تا یک فولدر src
در داخل فولدر پکیج بسازیم تا فایلهای مربوط به پکیج رو اونجا ذخیره کنیم. پس تا به اینجا فولدرها باید به چنین ترتیبی ساخته شده باشند:
فایل کامپوزر
هر پکیج باید یک فایل "composer.json" داشته باشد که حاوی تمام پکیج ها و وابستگی های آنها میباشد. برای ساخت این فایل در آدرس روت پکیج دستور زیر رو اجرا کنید:
از آنجایی که این یک دستور تعاملی است، کامپوزر چندین سوال میپرسد. دستورالعمل کامپوزر را دنبال کنید. اگر نمیدانید به سوالات چه پاسخی دهید، با فشردن کلید اینتر از مقادیر پیشفرض استفاده کنید. بعدا هم میتوانید این اطلاعات را در فایل "composer.json" تغییر دهید. حالا فایل "composer.json" شما باید کم و بیش اینگونه باشد:
بارگذاری پکیج در فایل اصلی کامپوزر
قبل از آنکه پکیج را به بارگذاری خودکار در لاراول اضافه کنیم، نیاز داریم تا یک قسمت دیگر به شئ موجود در فایل "composer.json" پکیج اضافه کنیم:
در این مرحله، فایل "composer.json" پکیج ما باید شبیه زیر باشد:
حال زمانی است که باید یه ریپازیتوری خالی برای پیگیری تغییرات در گیتهاب درست کنیم. در کامند لاین دستور زیر را تایپ کنید:
برای هر اپلیکیشن لاراول یک فایل "composer.json" در فولدر روت پروژه موجود است. لاراول باید بتواند فایل های پکیج ما را autoload کرده یا به صورت خودکار بارگذاری کند. برای انجام این پروسه باید قسمتی (autoload > psr-4) از فایل "composer.json" اصلی، که در فولدر روت پروژه لاراولی قرار دارد، را ویرایش کنیم و نیم اِسپیس پکیج را اضافه کنیم.
پس از آن در فولدر روت پروژه لاراول، دستور زیر را در کامند لاین اجرا کنید تا تغییراتی که در بالا انجام دادیم، اعمال شوند:
ساخت یک Service Provider برای پکیج
سرویس پروایدر نقطه دسترسی به پکیج ما است. در واقع سرویس پروایدر کلاسی است که شامل تمام اطلاعات مربوط به پکیج ما مثل: محل فایلهای ویو، مایگریشن ها، مسیرها و غیره میشود.
در فولدر src
پکیج فایلی به نام LikeableServiceProvider.php
بسازید. همچنین میتوانید از artisan
استفاده کنید و فایل را به این فولدر جا به جا کنید. داخل این سرویس پروایدر ما باید چند نکته را رعایت کنیم:
- باید نیم اِسپیس رو به نیم اِسپیسی که برای پکیج تعریف کردیم، تغییر بدیم.
- باید کلاس اصلی که سرویس پروایدرها ازش ارثبری میکنند، رو اضافه کنیم.
- افزودن دو متد الزامی هر سرویس پروایدر (متدهای
boot
وregister
) به کلاسی که ساختیم.
حال سرویس پروایدر پکیج ما باید شبیه زیر باشد:
خیلی خوب، سرویس پروایدر رو ساختیم. تنها کاری که میمونه اضافه کردن این کلاس به قسمت providers
آرایه موجود در فایل config/app.php
هست.
ساخت فایل مایگریشن
ارتباط با دیتابیس و ذخیره و دریافت اطلاعات جز مجموعه عملیات هاییست که تقریبا در بیشتر پکیج ها مورد استفاده قرار میگیره. ابتدا داخل فولدر src
فولدری به نام migrations
بسازید. سپس در فولدر اصلی پروژه لاراولی دستور زیر رو در ترمینال وارد کنید:
حالا فایل مایگریشن به وجود آمده رو ویرایش میکنیم و با کد زیر ستونها رو به جداولمون اضافه میکنیم. (این پکیج به ۲ جدول نیاز دارد که ما در اینجا هر دو را در قالب یک فایل مایگریشن پیاده سازی میکنیم)
حال نیاز داریم تا مایگریشن رو اجرا کنیم. اما پیش از آن، لاراول نیاز دارد بداند که این فایل مایگریشن که برای پکیج ساختیم را چگونه بارگذاری کند. پس فایل سرویس پروایدر پکیج را باز کرده و کد زیر را به متد boot
این فایل اضافه کنید.
حال میتوانیم با اجرای کد زیر در فولدر اصلی لاراول، جدولهای دیتابیس مورد نظر را بسازیم. (وقتی پکیج کامل شود و روی ریپازیتوری کامپوزر قرار بگیرد این مرحله خود به خود صورت میگیرد)
ساخت مدل برای جدولهای دیتابیس
بعد از آنکه مایگریشن ها را به وجود آوردیم، برای جدول ها مدلهای الکوئنت میسازیم تا بتوانیم از متدهای الکوئنت برای ایجاد، به روزرسانی و حذف اطلاعات در جداول استفاده کنیم.
حال فایل های Like.php
و LikeCounter.php
را که در فولدر app
پروژه لاراولی قرار دارند را، به فولدر src
پکیج انتقال دهید. و فراموش نکنید که نِیم اسپیس رو هم به نِیم اسپیس پکیج تغییر دهید. در اینجا AliBayat\Likeable
. حال میتوانیم کدهای مدل ها را طبق زیر اضافه کنیم:
و مدل LikeCounter
به شکل زیر:
در واقع کدهای اصلی ما برای این پکیج درون یک Trait
قرار میگیرند و در نتیجه ما میتوانیم به راحتی این تِرِیت رو به هر مدلی که خواستیم، اضافه کنیم و قابلیتهاش رو در اون مدل استفاده کنیم. و ساخت ۲ مدل بالا در اینجا برای استفاده از روابط بین جدول ها در الکوئنت میباشد.
در این نوشته با محتویات تِرِیت کاری نداریم، اما سعی میکنم در مطلبی جدا به عملکرد ها و قابلیت های این قسمت هم بپردازم. اما چنانچه شما علاقه به دیدن کد ها دارید، همیشه میتوانید در ریپازیتوری گیت هاب پکیج فایلها رو مورد بررسی قرار بدهید.
به روز رسانی Service Provider برای بارگذاری پکیج
پکیج ما با توجه به نوع عملکردش، احتیاجی به کنترلر، فایل های ویوی بلِید و یا Route نداشت. اما وجود این قسمت ها در بسیاری از پکیج ها ضروری هست. پس به توضیحی کوتاه درباره نحوه بارگذاری این فایل ها توسط لاراول میپردازیم.
تمام مراحل بارگذاری و همچنین عملیات هایی مثل انتشار فایلهای config & view ، در قلب پکیج ما یعنی داخل سرویس پروایدر صورت میگیرند. برای افزودن این موارد بصورت زیر عمل میکنیم:
اکنون میتوانید فایل های پکیج را توسط ابزار کامند لاین artisan
منتشر کنید:
به روز رسانی فایل کامپوزر
پکیج ما برای عملکرد، ممکن است به پکیجهای دیگری نیاز داشته باشد. و یا حتی شامل پیش نیازهایی باشد. اگر میخواهیم پکیج ما با نسخه خاصی از PHP
کار کند و یا پکیجهای خاصی را به عنوان پیشنیاز معرفی کنیم، فایل composer.json
پکیج ما و شئ require
آن دقیقا جایی است که این گونه موارد را باید اضافه کنیم. در نهایت فایل composer.json ما باید شبیه به زیر باشد.
همچنین می توانیم شئ extra
را هم به "composer.json"
اضافه کنیم که پکیج ما را بارگذاری میکند; و دیگر نیازی نیست آدرس سرویس پروایدر پکیج را به آرایه providers
در فایل "config/app.php"
اضافه کنیم.. و پکیج ما به صورت خودکار شناسایی میشود. این قابلیت تحت عنوان package auto-discovery
از نسخه ۵.۵ به هسته لاراول افزوده شد.
انتشار پکیج در سرویس Packagist.org (ریپازیتوری اصلی کامپوزر)
به عنوان قدم نهایی ما پکیج رو در گیت هاب و سپس در پکیجیست ثبت میکنیم و در نتیجه بعد از آن قادر خواهیم بود، این پکیج را از طریق کامند composer
به راحتی نصب کنیم.
سری به گیت هاب بزنید و یک ریپازیتوری جدید بسازید. لینک ریپازیتوری که ساختید رو کپی کنید، سپس به فولدر اصلی پکیج رفته و دستور زیر را در ترمینال وارد کنید:
سپس فایل ها را اضافه کرده و کامیت میکنیم:
و در نهایت فایل ها را پوش کرده یا به ریپازیتوری ارسال میکنیم.
ما در این بخش از دستورات گیت استفاده کردیم، اما اگر شما به گیت دسترسی ندارید و یا حتی دوست ندارید از طریق ترمینال کار کنید; میتوانید در سایت گیت هاب هم این عملیات ها رو انجام بدید.
حالا به سایت پکیجیست (Packagist.org) رفته، و لینک ریپازیتوری گیت هاب پکیج را ثبت کنید و تمام.
نصب پکیج و استفاده از متدهای آن
در این مرحله به راحتی میتوانید پکیچ منتشر شده را هر زمان که خواستید با کامپوزر نصب کنید و استفاده کنید:
سپس مایگریشنها را اجرا کنید:
برای آماده سازی مدل، فقط باید از تِرِیت پکیج داخل مدل مورد نظر استفاده کنید:
به همین سادگی ما قابلیت لایک شدن رو به مدل Post
اضافه کردیم. با این کار یک سری متد ها که مربوط به این قابیلت(لایک شدن) هستند به مدل ما اضافه میشه; که در تصویر زیر بهشون اشاره شده:
نتیجه گیری
این پکیج به گونه ای طراحی شده تا بتونه با مدلهای الکوئنت در ارتباط باشه و قابلیت لایک شدن رو هر جا که خواستیم به مدلمون اضافه کنه. و این سبک پیاده سازی به حل مشکلی که در ابتدای نوشته بهش اشاره کردم، کمک بسیاری میکند. سورس این پروژه روی گیتهاب موجود هست.
https://github.com/AliBayat/Laravel-Likeable
و در پایان: ما در این نوشته ساخت یک پکیج نسبتا ساده را برای فریمورک لاراول و انتشار آن روی سرویس پکیجیست را بررسی کردیم، اما موارد (پکیجهای) بسیار جذاب دیگری وجود دارند که می توانید با استفاده از این دانش جدید بسازید.
مطلبی دیگر از این انتشارات
در استفاده از Accessors, Mutators و Model Events لاراول مراقب باشید!!!
مطلبی دیگر از این انتشارات
۱۰ ویژگی مخفی لاراول که تا به امروز نمی دانستید
مطلبی دیگر از این انتشارات
پکیج تجزیه کننده User Agent برای لاراول