کاربردی ترین پکیج های لاراول

اگه PHP رو سیخ کباب فرض کنیم
اگه لاراول رو خود کباب فرض کنیم?
پس میشه گفت پکیج های لاراول هم ادویه هستن!??️
اگه نزنین کباب اون طعمی که باید رو نمیده. یه کباب بدون نمک و فلفل و زردچوبه و ...
اگه زیاد هم بزنین کلی طعم مختلف قاطی میشه و زیاد هم جالب نیست

پکیج های لاراول هم همینه
حالا من اینجا میخام بنویسم از پکیج هایی که هر بار یه پروژه لاراول جدید میسازم به پروژه ام اضافه میکنم تا طعم کد نویسی بهتر بشه ?
از اون طرف یه سری کارها هم انجام میدم که اینجا بهتون میگم.

مهم ترین ادویه!

https://github.com/barryvdh/laravel-debugbar

این ابزار یه قسمت به صفحه سایت اضافه میکنه که میتونین کار های مختلفی باهاش انجام بدین و گزارش بگیرین
میتونین لاگ ها رو داخل همون صفحه ببینین بدون اینکه نیاز باشه فایل لاگ رو باز کنین
میتونین درخواست های ایجکس رو ببینین
میتونین محتوای کوکی و سشن رو ببیینین
و قابلیتی که من ازش خیلی استفاده میکنم میتونین کوئری هایی که در یه صفحه اجرا میشه رو ببینین و بررسی کنین چند تاشون
duplicate
یا تکراری هست و با روش هایی مثل
Eager load
یا کش کردن بهینه تر کنین

برای شروع این کامند رو میزنم

composer require barryvdh/laravel-debugbar --dev

بعد هم این کامند رو برای ایجاد فایل کانفیگش

php artisan vendor:publish --provider=&quotBarryvdh\Debugbar\ServiceProvider&quot

ادویه دوم برای IDE

هر جایی که کد میزنین اگه قابلیت
autocomplete
داشته باشه اونقدی باهوش نیست که بتونه همه چیز رو کشف کنه.

https://github.com/barryvdh/laravel-ide-helper

این پکیج تا حد زیاد قابلیت های لاراول رو به
autocomplete
محیطی که توش کد میزنین معرفی میکنه.
یه نمونه قبل نصب:

همون بعد نصب:

برای نصب اول کامند زیر رو میزنم

composer require barryvdh/laravel-ide-helper --dev

بعد این کامند رو برای ایجاد فایل کانفیگ

php artisan vendor:publish --provider=&quotBarryvdh\LaravelIdeHelper\IdeHelperServiceProvider&quot --tag=config

فرآیند نصب تموم شده حالا میتونین از کامند های این پکیج برای ساخت فایل های اضافه جهت شناسوندن به
autocomplete
استفاده کنین ولی کی حال داره بعد هر بار تغییر این حرکت رو بزنه
من یه برنامه نویس تنبلم و تنبلا همیشه دنبال راحت ترین راه ها میگردن.
من این سه خط رو به فایل
composer.json
اضافه میکنم که با هر بار
dump autoload
این فایل ها از اول ساخته بشن.
این شامل اضافه کردن پکیج های جدید به لاراول هم میشه
تو قسمت
scripts

این خط رو

&quotpost-autoload-dump&quot: [
    &quotIlluminate\\Foundation\\ComposerScripts::postAutoloadDump&quot,
    &quot@php artisan package:discover --ansi&quot
],

سه خط به آرایه اش اضافه میکنم

&quotpost-autoload-dump&quot: [
    &quotIlluminate\\Foundation\\ComposerScripts::postAutoloadDump&quot,
    &quot@php artisan package:discover --ansi&quot,
    &quot@php artisan ide-helper:generate&quot,
    &quot@php artisan ide-helper:meta&quot,
    &quot@php artisan ide-helper:models --nowrite&quot
],

در آخر اگه شما یه برنامه نویس حرفه ای باشین حتما از یه نرم افزار کنترل نسخه مثل گیت استفاده میکنین لازمه که فایل های
ide helper
رو از روی ورژن کنترل بردارین وگرنه با هم تیمیاتون به کلی
conflict
الکی میخورین که حسابی دردسر میشه براتون
برای جلوگیری از این دردسر این سه خط رو به
.gitignore
اضافه میکنم.

/_ide_helper_models.php
/_ide_helper.php
/.phpstorm.meta.php

ادویه سوم.

دست گل ?عمو تیلور تو نسخه 6 لاراول
اگه از لاراول 6 به قبل استفاده میکردین حتما میدونستین به صورت پیش فرض یه سری کد ویو ( یا کد ری اکت که با کامند آرتیسن تبدیل میشد ) تو پروژه تازه ساخته شده وجود داشت و همچنین یه دستور
php artisan make:auth
هم بود که بیس کار رو برای ثبت و ورود کاربر حاضر میکرد تا کارا سری پیش بره
حالا همه ی این امکانات به یه پکیج جدا
laravel/ui
منتقل شد.
برای نصب اول این کامند رو میزنم

composer require laravel/ui --dev

بعد هم من چون از ویو استفاده میکنم از این کامند برای ساخت بیس کار استفاده میکنم.

php artisan ui vue --auth

کادر آخر هم اون کامندی که توی خروجی کامند بالا بود رو میزنم.

npm install
npm run dev

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

/public/css
/public/js
/public/mix-manifest.json

ادویه با طعم سئو

https://github.com/cviebrock/eloquent-sluggable

این پکیج کمک میکنه تا آدرس های داینامیک و مناسب برای گوگل بسازین مثلا این لینک ها رو ببینین
test.com/post/welcome-to-post
test.com/test?id=4
test.com/test/4

من که از سئو سر در نمیارم ولی سئو کارا میگن گوگل با اون اولی خیلی بیشتر حال میکنه.
برای شروع این کامند رو میزنم.

composer require cviebrock/eloquent-sluggable

برای ساخت فایل کانفیگ هم این دستور رو میزنم.

php artisan vendor:publish --provider=&quotCviebrock\EloquentSluggable\ServiceProvider&quot

حالا هر موقع برای هر کدوم از مدل هام آدرس اختصاصی نیاز داشتم حرکت های زیر رو انجام میدم.
اول فیلد slug رو به جدول اضافه میکنم.

$table->string('slug')->unique()->index();

بعد کانفیگ لازم رو برای مدل انجام میدم.

class Category extends Model
{
    use Sluggable;
    public function sluggable()
    {
        return ['slug' => ['source' => 'name']];
    }
}

بعد قابلیت روت مدل بانیدینگ رو با استفاده از اسلاگ فراهم میکنم.
توی تابع boot توی فایل RouteServiceProvider برای مدل مورد نظرم قابلیت بایند کردن رو فراهم میکنم.

Route::bind('category_by_slug', function ($slug) {
    return Category::where('slug', $slug)->firstOrFail();
});

روت های مورد نیازم رو تعریف میکنم و کنترلر و ویو و این داستانا.

Route::get('/دسته-بندی/{category_by_slug}', 'CategoryController')->name('category');

بعد برای راحت تر شدن دسترسی به آدرس مدل ها یه میوتیتور مینویسم تو مدلم.

public function getLinkAttribute()
{
    return route('category', ['category_by_slug' => $this->slug]);
}

و خیلی راحت هر جا لازمش داشتم ازش استفاده میکنم.

$category->link

ادویه تصاویر

https://github.com/Intervention/image

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

composer require intervention/image

بعد با کامند زیر فایل کانفیگش رو میسازم.

php artisan vendor:publish --provider=&quotIntervention\Image\ImageServiceProvider&quot

حالا برای اینکه بتونم از سایز کوچیک شده عکس ها استفاده کنم این حرکت رو میزنم.
من معمولا فایل های آپلود شده رو توی یه فولدر uploads داخل فولدر public لاراول میسازم البته میدونم درست ترش اینه که توی storage بسازم و لینک کنم اما خب اکثر سایتایی که ما میزنیم روی هاست آپلود میشه و روی اکثر هاست ها قابلیت لینک فراهم نیست.
برای ساخت نسخه کوچیک شده به یه مسیر مشخص تو لاراول ریکوئست میره و اونجا عکس توسط این پکیج کوچیک میشه و نشون داده میشه. برای اینکه سرعت بالا بره من عکس رو کش میکنم و برای اینکار دقیقا محل ذخیره رو جوری مینویسم که انگار همون آدرسیه که تو لاراول نوشتم و وظیفه تبدیل عکس رو به عهده داشت. به این شکل فقط تو اولین ریکوئست فایل کوچیک میشه و از ریکوئست دوم به بعد خود اون فایله لود میشه.
اول روت مورد نظر رو تعریف میکنم.

Route::get(&quot/uploads/resized-images/{size}/{image_path}&quot, &quotImageController@resizedImage&quot)->name(&quotresized-image&quot)->where(&quotimage_path&quot, &quot.+&quot);

بعد کنترلر رو به این شکل مینویسم.

https://gist.github.com/amir9480/774ca02826324c23135152fbbe93d04d

حالا برای استفاده راحت تر کافیه یه میوتیتور دیگه توی مدلم بنویسم.

public function getImageLinkAttribute()
{
    return Storage::disk('public')->url($this->image);
}

public function getImageThumbLinkAttribute()
{
    return route('resized-image', ['image_path' => $this->image, 'size' => 'small']);
}

فیلد image همون مسیر ذخیره عکس تو پوشه آپلود ها هستش.
به همین راحتی به لینک نسخه اصلی عکس و لینک نسخه کوچیک شده دسترسی دارم.

{{ $post->image_link }}
{{ $post->image_thumb_link }}

ادویه ای برای دست گل طراحا برای طراحی مدرن

Breadcrumbs!

میتونم بگم اکثر سایت هایی که تا حالا زدم چه با قالب حاضر و آماده چه با قالب اختصاصی داخلش
breadcrumb
داشت و اوایل دستی میزدم. اما وقتی با این پکیج آشنا شدم دستی نوشتن بردکرامب کاملا از سرم بیرون رفت دیگه هم برنگشت.

https://github.com/davejamesmiller/laravel-breadcrumbs

ادویه برای تاریخ شمسی

ما چه خواسته و چه ناخواسته تو ایران به دنیا اومدیم و اگه برای ایرانی سایت بزنیم احتمالا یه جایی نیاز میشه که با تاریخ شمسی هم سر و کله بزنیم. برای تاریخ شمسی خودم از این پکیج استفاده میکنم و به نظر شخصی خودم نسبت به پکیج های مشابه ش خیلی تمیز تر نوشته شده.

https://github.com/hekmatinasser/verta/

ادویه ای برای هاست های اشتراکی و مشتریان خسیس

https://github.com/recca0120/laravel-terminal

اگه شما هم نیاز دارین که سایتی که ساختین رو روی هاست اشتراکی آپلود کنین پس برای زدن دستورات آرتیسان این پکیج لازمتون میشه حسابی.
برای شروع این کامند رو میزنم.

composer require recca0120/terminal

برای ساخت فایل کانفیگ و ویو و ... این کامند رو میزنم.

php artisan vendor:publish --provider=&quotRecca0120\Terminal\TerminalServiceProvider&quot

بعد این قسمت فایل کانفیگش رو از

'enabled' => env('APP_DEBUG'),

تغییر میدم به

'enabled' => true,

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

'middleware' => ['web'],

مثلا

'middleware' => ['web', 'auth', 'can:access_admin_panel'],

ادویه مخصوص سر آشپز

یه سری ادویه ها بود مثل ادویه های پرداخت و وصل شدن به بانک یا ورود با گوگل و این چیزا که ننوشتم ازشون

اما علاوه بر اونا یه سری جاها هست که باید یه جعبه داشته باشین توش ادویه های مخصوص به خودتون باشه و ازش استفاده کنین. یه سری چیزا که بین پروژه ها مشترکه و مخصوص خودتونه و میدونین بهش نیاز دارین. پس چند بار ننویسینش و قاعده DRY رو رعایت کنین و یه پکیج مخصوص خودتون بسازین. اگه دوست ندارین در دسترس همه باشه اصلا اشکالی نداره با کمک قابلیت
Repositories
کومپزر براحتی فقط خودتون و هم تیمیاتون ازش استفاده کنین. اگه هم نه عمومی منتشرش کنین شاید یکی از این ادویه مخصوص سرآشپزتون خوشش اومد و به پروژه خودش اضافه کرد.

تبلیغات!

ادویه مخصوص سرآشپز من اینه. شاید بزنه پروژتون رو حتی بد مزه کنه اما یه نگاهی بهش بندازین.
من کاربری های عمومی رو توی این پکیج برای خودم و هم تیمیام فراهم میکنم.

https://github.com/sanjabteam/baloot

بعد یه قسمت دیگه هم که بین پروژه ها مشترکه پنل ادمین هست که اون رو هم به شکل یه پکیج در آوردم و سرعت کارمون رو خیلی بهبود میده

https://github.com/sanjabteam/sanjab

پیشنهاد نمیکنم از این پکیج ها استفاده کنین ادویه آنچنان خفنی نیست
اما به شدت پیشنهاد میکنم که پکیجی بسازین که کاراتون رو راحت کنه.
اگه این ابزار راحت کننده رو با ما به اشتراک بذارین که چه بهتر.

زیر همین پست اگه ادویه خوبی برای لاراول میشناسین بهم معرفی کنین بزنم به پروژه هام ببینم چه مزه ای میشن ?.



سایر نوشت هام:

https://virgool.io/laravel-community/%D8%B3%D8%A7%D8%AE%D8%AA-%D9%BE%D9%86%D9%84-%D8%A7%D8%AF%D9%85%DB%8C%D9%86-%D8%A8%D8%A7-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D8%A8%D9%87-%D8%B3%D8%B1%DB%8C%D8%B9-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B1%D9%88%D8%B4-%D9%85%D9%85%DA%A9%D9%86-iaycwl52ddwq
https://virgool.io/laravel-community/%D9%88%D8%B5%DB%8C%D8%AA-%D9%86%D8%A7%D9%85%D9%87-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-dlyu27r2ijld
https://virgool.io/laravel-community/%D8%A7%D9%81%D8%B2%D9%88%D9%86%D9%87-%D9%85%D9%86-%D8%A8%D8%B1%D8%A7%DB%8C-vscode-%D9%88-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-mw9bcpvidbrd