5 ویژگی رشته کم ارزش


افرادی که زمان زیادی را در جریان توییچ من صرف کردهاند، میدانند که من واقعاً، واقعاً عاشق یک بسته لاراول خاص هستم: Filament. این یک گروه بسیار قدرتمند از بسته ها برای کمک به ایجاد قابلیت های مشترک در برنامه های کاربردی TALL-stack است. من از هر یک از بسته ها به تنهایی استفاده کرده ام، اما متداول ترین بسته مورد استفاده من بسته ای است که همه آنها را ترکیب می کند: پنل مدیریت.
در طول مدتی که از Filament استفاده می کردم، پس از شوک اولیه مبنی بر اینکه استفاده از قطعات اصلی عملکرد چقدر آسان است، متوجه شدم که تعداد انگشت شماری از ویژگی ها وجود دارند که اگرچه بیشترین زمان را در کانون توجه نمی گذرانند، اما به طرز باورنکردنی صیقل داده شده اند. این ویژگیها دقیقاً برای بسیاری از مردم زمین را درهم شکسته نیستند، اما اگر در موقعیتی قرار بگیرید که به یکی از آنها نیاز دارید، همه چیز را بسیار آسانتر میکند.
بیایید مستقیماً وارد شویم: در اینجا پنج ویژگی برتر من از Filament که کمتر ارزیابی شده است.
1. تولید نمودار ساده
نمودارها، نمودارها و داده ها، اوه من!
پس از سالها کار بر روی برنامههای لاراول که از پنلهای مدیریت استفاده میکنند، ساختن نمودارها و نمودارها از دادههای برنامه دقیقاً در بالای فهرست آپشن های اغلب درخواستی من قرار دارد. من میتوانم بفهمم چرا، اما دادهها فرآیند تصمیمگیری یک کسبوکار را اطلاع میدهند، و توانایی دیدن دادهها به روشی قابل درک برای انسان به کاربران کمک میکند تا در یک نگاه سریع و آگاهانه تصمیمگیری کنند.
خوشبختانه، در چند سال گذشته، ایجاد نمودارها و نمودارها با معرفی کتابخانه های نموداری آسان تر و آسان تر شده است. با این حال، برای استفاده از این بستهها، همچنان باید آنها را نصب و پیکربندی کنید، استایلی را برای آنها تنظیم کنید، و سپس همه دادهها را درون آنها فشار دهید تا بتوانند به درستی نمایش داده شوند. با این حال، اگر از Filament استفاده می کنید، اکنون یک راه آسان تر وجود دارد!
Filament به شما این امکان را می دهد که به سرعت و به راحتی نمودارها را با استفاده از کتابخانه Chart.js از طریق چندین کلاس ویجت Chart
از پیش ساخته شده و قابل ارتقا ایجاد کنید. برخی از موارد دلخواه شخصی من LineChartWidget
، BarChartWidget
، و همیشه سرگرم کننده DoughnutChartWidget
هستند! به سادگی ایجاد یک کلاس ویجت جدید، گسترش ویجت نموداری که میخواهید استفاده کنید، و دادن یک عنوان و مقداری داده به کلاس جدیدتان است. مثلا:
<?php
فضای نام App\Filament\Widgets ؛
استفاده کنید Filament\Widgets\BarChartWidget ;
کلاس LikesPerDay گسترش می یابد BarChartWidget
{
حفاظت شده تابع getHeading () : رشته
{
برگشت 'لایک پست های وبلاگ در روز' ;
}
حفاظت شده تابع getData () : آرایه
{
بازگشت [
"مجموعه داده" => [
[
'برچسب' => "تعداد لایک" ،
'داده ها' => [ 12 ، 32 ، 12 ، 35 ، 22 ]،
]،
]،
'برچسب ها' => [
'01-01-2022' ،
'09-01-2022' ،
'12-01-2022' ،
'2022-01-22' ،
'2022-01-23' ،
]،
]؛
}
}
هنگامی که ویجت نمودار خود را ساختید، می توانید از آن در هر داشبورد پروژه خود استفاده کنید!
اگر نمودارها و نمودارهای زیادی را برای سیستم خود می سازید، این یک صرفه جویی در زمان است، اما Filament با ادغام یک بسته جالب: بسته flowframe/laravel-trend
این یک گام جلوتر می رود. این بسته به شما اجازه می دهد تا با استفاده از نحو Eloquent که می شناسید و دوست دارید، روند داده ها را از مدل های خود ایجاد کنید! به عنوان مثال، کد بالا می تواند به صورت زیر بازنویسی شود:
<?php
فضای نام App\Filament\Widgets ؛
استفاده کنید App\Models\Like ;
استفاده کنید Filament\Widgets\BarChartWidget ;
استفاده کنید Flowframe\Trend\Trend ;
استفاده کنید Flowframe\Trend\TrendValue ;
کلاس LikesPerDay گسترش می یابد BarChartWidget
{
حفاظت شده تابع getHeading () : رشته
{
برگشت 'لایک پست های وبلاگ در روز' ;
}
حفاظت شده تابع getData () : آرایه
{
$data = روند :: مدل ( لایک ::class )
-> بین (
start : now () -> subdays ( 5 )
پایان : اکنون ()
)
-> در روز ()
-> شمارش ();
بازگشت [
"مجموعه داده" => [
[
'برچسب' => "تعداد لایک" ،
'داده ها' => $data -> نقشه ( fn ( TrendValue $value) => $value -> مجموع)،
]،
]،
'برچسب ها' => $data -> map ( fn ( TrendValue $value) => $value -> date)
]؛
}
}
مثال بالا ساده است، اما از آنجایی که laravel-trends
به شدت توسط Eloquent پشتیبانی می شود، می توانید پرس و جوهای قدرتمند و گسترده ای برای جمع آوری داده ایجاد کنید. برای اطلاعات بیشتر در مورد بسته laravel-trends
، مستندات را تحلیل کنید
2. اطلاعیه های زمان واقعی
اعلان ها در اکثر برنامه های کاربردی وب مدرن جزء اصلی هستند. آنها به هر شکلی به کاربر کمک می کنند تا از رویدادهای مهمی که در سیستم، حساب یا داده هایش رخ می دهد آگاه شوند. از آنجا که آنها بخش مهمی از هر برنامه کاربردی هستند، نگهدارنده های Filament تمام تلاش خود را برای ایجاد یک بسته اعلانات قوی و با استفاده آسان که در پنل مدیریت استفاده می شود، انجام داده اند.
ایجاد اعلانهای رشتهای بسیار ساده است. هر جایی که میخواهید یک اعلان را در کد رشته خود ارسال کنید، میتوانید از API روان شی Notification
(مشابه Eloquent
، در صورتی که با اصطلاح «API fluent» آشنایی ندارید) برای ایجاد و ارسال اعلان به کاربر. در اصل، ارسال یک اعلان در Filament به این صورت است:
<?php
فضای نام App\Http\Livewire ;
استفاده کنید Filament\Notifications\Notifications ;
استفاده کنید Livewire\Component ;
کلاس لایک پست گسترش می یابد جزء
{
عمومی تابع storeLike () : خالی
{
// مانند ایجاد و ذخیره کد
اعلان :: ساخت ()
-> عنوان ( "تصاویر شما با موفقیت پردازش شدند" )
-> موفقیت ()
-> ارسال ();
}
}
سخت تر از این ساده تر می شوید!
با این حال، جنبه دیگری نیز در این مورد وجود دارد، که اعلانهای Filament را از یک بسته عالی به یک بسته ضروری تبدیل میکند و آن توانایی انجام اعلانهای بلادرنگ است.
معمولاً، بدون اعلانهای همزمان، اگر میخواهید وقتی پردازش یک کار طولانی مدت (مانند یک کار در صف) به پایان میرسد، کاربر خود را بهروزرسانی کنید، باید به طور مداوم یک نقطه پایانی را در پسزمینه نظرسنجی کنید که در نهایت به شما اطلاع میدهد که کار تکمیل شد مطمئناً این یک روش عملی برای انجام این کار است، اما بسته به مورد استفاده شما، میتواند فشار سنگینی را بر سرور شما وارد کنید که صدها یا هزاران کاربر از یک نقطه پایانی بارها و بارها منتظر تکمیل کار خود هستند. اگر در چنین موقعیتی قرار گرفتید، بسته Notifications Filament به طور بومی با Laravel Echo، یک کتابخانه جاوا اسکریپت که به شما امکان میدهد در کانالها مشترک شوید و به رویدادهایی که توسط سرورتان پخش میشود گوش دهید، ادغام میشود. با این ادغام (و همچنین نوعی پیاده سازی وب سوکت ها که بر روی سرور شما نصب شده است، یعنی Pusher)، ما می توانیم کد اعلان قبلی را به روز کنیم تا به جای ارسال مستقیم اعلان پس از انجام یک اقدام، اعلان را در زمان واقعی پخش کنیم.
فیلامنت چند راه مختلف برای ارسال اعلانهای بلادرنگ به ما میدهد، اما گزینه ترجیحی من استفاده از کلاس اعلان لاراول مانند سایر اعلانها در سیستم من است. به این ترتیب، همه اعلانهای من به طور مشابه نوشته میشوند، صرف نظر از اینکه برای Filament یا هر بخش دیگری از برنامه هستند. تنها تفاوت این است که ما باید به کلاس Notification
خود یک متد toBroadcast
بدهیم که اعلان Filament را فعال می کند، مانند:
<?php
فضای نام برنامه\اعلان ها ؛
استفاده کنید App\Models\User ;
استفاده کنید Filament\Notifications\Notification مانند Filament Notification ;
استفاده کنید Illuminate\Notifications\Notification ;
استفاده کنید Illuminate\Notifications\Messages\BroadcastMessage ;
کلاس تصاویر بهینه شده گسترش می یابد اطلاع
{
عمومی تابع toBroadcast ( User $ nottifiable) : پیام پخش
{
برگشت Filament Notification :: make ()
-> عنوان ( "تصاویر شما با موفقیت بهینه شده اند" )
-> getBroadcastMessage ();
}
}
با ساختن کد اعلان فیلامنت خود در یک اعلان لاراول، امکان استفاده از همین اعلان را در قالبهای دیگر مانند ایمیل، پیامک و غیره باز میکنیم. بهره مندی از داشتن یک کلاس اختصاصی برای این اعلان که در همان مکان (یا مشابه) سایر اعلان های ما برای برنامه ما قرار دارد.
اگر ایجاد یک کلاس کامل سرعت شما نیست، Filament همچنین یک API روان برای پخش اعلانها به روشی بسیار شبیه به کد اعلان فیلامنت اصلی و همزمان ما ارائه میکند. مورد علاقه خود را انتخاب کنید و از آنچه مناسب پروژه شما و مورد استفاده شما است استفاده کنید!
3. جستجوی جهانی بومی
تقریباً هر پروژه ای که دارای پنل مدیریت است در نهایت به راهی برای مرتب کردن سریع تمام داده های سیستم نیاز دارد. ممکن است برخی بگویند هنگامی که به جستجوی سراسری در برنامه خود نیاز دارید، باید UI/UX خود را به روز کنید، اما حتی در پروژه هایی با رابط کاربری بی عیب و نقص و قابل استفاده، یک نوار جستجوی جهانی می تواند ابزار مفیدی برای کاربرانی باشد که دقیقاً می دانند چه چیزی دارند. می خواهید بدون اینکه به یاد داشته باشید کجا آن را پیدا کنید.
ایجاد یک پیاده سازی جستجوی جهانی می تواند یک فرآیند خسته کننده و وقت گیر باشد. اطمینان از ساختن یک گزینه کارآمد و کاربرپسند به دانش کافی برای درست کردن آن نیاز دارد. خوشبختانه، Filament یک ویژگی جستجوی جهانی قابل توجهی را در پنل مدیریت خود ارائه کرده است که کارهای سنگین زیادی را برای ما توسعه دهندگان انجام می دهد. در سطح پایه، تنها چیزی که برای گفت ن منابع خاص به عملکرد جستجوی جهانی نیاز است، گفت ن یک protected static ?string $recordTitleAttribute
به کلاس Resource خود است. این ویژگی عنوان به Filament او میگوید که وقتی کاربر سعی میکند از جستجوی سراسری استفاده کند، یک ویژگی خاص (معروف به ستون) را از منبع شما جستجو کند. به عنوان مثال، تنظیم $recordTitleAttribute
یک منبع کاربر بر روی last_name
باعث می شود که Filament رشته جستجو را با ویژگی last_name
همه کاربران در سیستم مقایسه کند.
این روشی که به Filament او میگوید چه آپشن های ی را در منابع خاص جستجو کند در بسیاری از موارد کار میکند، اما مواقعی وجود دارد که ممکن است بخواهید جستجوی Filament را در چندین ستون داشته باشید. جستجوی جهانی Filament به ما اجازه میدهد تا متد getGloballySearchableAttributes()
را نادیده بگیریم تا آرایهای از ستونها (شامل روابط با استفاده از علامت نقطه استاندارد Laravel) را که Filament جستجو میکند، بازگردانیم!
چند چیز دیگر نیز وجود دارد که Filament به ویژگی جستجوی جهانی اضافه کرده است، اما من شما را می گذارم تا صفحه مستندات را تحلیل کنید (خواندن آن آسان است) و خودتان برخی از قطعات سرگرم کننده را کشف کنید!
4. نه فقط یک پنل مدیریت
من در ابتدای این پست به این موضوع اشاره کردم، اما یکی از قسمت های مورد علاقه من در مورد Filament، و یکی از دلایلی که آن را به عنوان یکی از بهترین بسته ها در کل اکوسیستم لاراول معرفی می کنم، این است که تمام قسمت های اصلی Admin بسته پانلی که ما در تمام این مدت در مورد آن صحبت کردهایم (جدول، فرمها و اعلانها) بهعنوان بستههای مستقل برای استفاده در برنامههای پشته TALL در دسترس است. به یک راه آسان برای ایجاد فرم ها در برنامه پشته TALL نیاز دارید؟ پکیج Filament Forms را نیز شامل کنید. اعلانهایی با ظاهر زیبا و بیدرنگ (نقطه 2 را ببینید) میخواهید؟ بسته Filament Notifications را در پروژه خود قرار دهید!
سازندگان و نگهدارندههای Filament میدانند که نرمافزارشان چقدر خوب است، و نه تنها آن را باندل میکنند و به صورت رایگان در بسته پنل مدیریت خود میدهند، بلکه برای نگهداری هر یک از این بخشها بهعنوان مستقل و مستقل زمان میگذارند. بسته نیز. چه هدیه ای برای جامعه لاراول و لایو وایر! پس دفعه بعد که در حال ساختن یک برنامه TALL هستید و می خواهید برخی از عملکردهای خوب را از پنل مدیریت بدون نیاز به گنجاندن کل بسته، انتخاب کنید و از بین سه پلاگین اصلی آنچه را که بیشتر دوست دارید انتخاب کنید و برنامه خود را از بین برخی از بهترین ها بسازید. بسته های TALL ساخته شده در جامعه.
5. صفحات سفارشی
آخرین، اما مطمئناً نه کم اهمیت ترین، ویژگی مورد علاقه من در پنل مدیریت Filament است: صفحات سفارشی. تعداد زیادی نرم افزار پنل مدیریت مبتنی بر CRUD وجود دارد و Filament نیز از این قاعده مستثنی نیست. نان و کره Filament گردش کار آنها مبتنی بر CRUD است. با این حال، هنگام ساخت برنامههای کاربردی «زندگی واقعی»، همیشه چیزی وجود دارد که نمیتوان آن را به راحتی (یا اصلاً) با نمایشهای CRUD تولید شده که اکثر پنلهای مدیریت ارائه میدهند، مدیریت کرد. خواه این صفحه ای باشد که چندین منبع را با هم جمع می کند یا یک نمای بسیار تخصصی که با ذهنیت معمول "CRUD-for-a-specific-source" مطابقت ندارد، بیش از یک بار مجبور شده ام از محدوده مدیریت خارج شوم. پانل برای رسیدن به این.
با Filament، میتوانم هر صفحه سفارشی را که میخواهم ایجاد کنم، بدون اینکه نیازی به ترک پنل مدیریت باشم.
صفحات سفارشی Filament در دو نوع ارائه می شوند: مبتنی بر منابع و عمومی. صفحات سفارشی مبتنی بر منبع به متد getPages()
در کلاس Resource شما اضافه می شوند، به همان ترتیبی که صفحات List
، Create
، View
و Edit
همگی اضافه می شوند. این صفحات معمولاً برای گردش کار مناسب هستند و مواردی را استفاده می کنند که فقط با یک منبع خاص مطابقت دارند، اما کمی خارج از صفحات معمولی CRUD قرار می گیرند.
صفحات جالب تر (برای من) صفحات سفارشی عمومی هستند. این صفحات صرفاً اجزای تمام صفحه Livewire هستند که تمام ویژگیها و عملکردهای Livewire در اختیار شما، توسعهدهنده قرار میگیرد. ایجاد یکی از این صفحات به سادگی استفاده از Artisan است ( php artisan make:filament-page YourPage
) و هنگامی که فایل ها را در مقابل خود دارید، می توانید هر کدی را که در پشته TALL نیاز دارید بنویسید. در مورد شخصی سازی صحبت کنید!
هنوز هیجان زده اید؟
میدانم که هستم.
این پنج ویژگی به سختی سطح کارکرد معدن طلا را که نگهبانان Filament در این بسته قرار داده اند، خراش می دهد. حتی فقط نوشتن در مورد آنها باعث می شود که بروم و آنها را اجرا کنم و در پروژه های Filament خود عمیق تر در هر یک از آنها غوطه ور شوم! اما شما چه فکر می کنید؟ آیا هیچ یک از این ویژگی ها را در برنامه های Filament خود امتحان کرده اید؟ آیا ویژگی های دست کم گرفته شده ای از Filament وجود دارد که فکر می کنید من از دست داده ام؟ در توییتر یا ماستودون با من تماس بگیرید و نظر خود را به من بگویید!
ارسال نظر