پالس لاراول
معرفی
Laravel Pulse در یک نگاه بینش هایی را در مورد عملکرد و استفاده برنامه شما ارائه می دهد. با Pulse، میتوانید گلوگاههایی مانند کارهای کند و نقاط پایانی را ردیابی کنید، فعالترین کاربران خود را پیدا کنید و موارد دیگر.
برای اشکال زدایی عمیق رویدادهای فردی، تلسکوپ لاراول را بررسی کنید .
نصب و راه اندازی
پیاده سازی ذخیره سازی شخص اول Pulse در حال حاضر به یک پایگاه داده MySQL یا PostgreSQL نیاز دارد. اگر از موتور پایگاه داده دیگری استفاده می کنید، برای داده های پالس خود به یک پایگاه داده MySQL یا PostgreSQL جداگانه نیاز دارید.
از آنجایی که Pulse در حال حاضر در مرحله بتا است، ممکن است لازم باشد فایل برنامه خود را
composer.json
طوری تنظیم کنید که بستههای بتا نصب شوند:
"minimum-stability": "beta","prefer-stable": true
سپس، می توانید از مدیر بسته Composer برای نصب پالس در پروژه لاراول خود استفاده کنید:
composer require laravel/pulse
در مرحله بعد، باید فایل های پیکربندی و انتقال پالس را با استفاده از
vendor:publish
دستور Artisan منتشر کنید:
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
migrate
در نهایت، برای ایجاد جداول مورد نیاز برای ذخیره داده های پالس،
باید دستور را اجرا کنید :
php artisan migrate
هنگامی که انتقال پایگاه داده پالس اجرا شد، می توانید از طریق
/pulse
مسیر به داشبورد پالس دسترسی داشته باشید.
اگر نمی خواهید داده های پالس را در پایگاه داده اصلی برنامه خود ذخیره کنید، می توانید یک اتصال پایگاه داده اختصاصی را مشخص کنید .
پیکربندی
بسیاری از گزینه های پیکربندی پالس را می توان با استفاده از متغیرهای محیطی کنترل کرد. برای مشاهده گزینه های موجود، ثبت ضبط کننده های جدید، یا پیکربندی گزینه های پیشرفته، می توانید
config/pulse.php
فایل پیکربندی را منتشر کنید:
php artisan vendor:publish --tag=pulse-config
داشبورد
مجوز
داشبورد پالس ممکن است از طریق
/pulse
مسیر قابل دسترسی باشد. بهطور پیشفرض، شما فقط میتوانید به این داشبورد در
local
محیط دسترسی داشته باشید، بنابراین باید مجوز را برای محیطهای تولیدی خود با سفارشی کردن
'viewPulse'
دروازه مجوز پیکربندی کنید. شما می توانید این کار را در فایل برنامه خود انجام دهید
app/Providers/AppServiceProvider.php
:
use App\Models\User;use Illuminate\Support\Facades\Gate; /** * Bootstrap any application services. */public function boot(): void{ Gate::define('viewPulse', function (User $user) { return $user->isAdmin(); }); // ...}
سفارشی سازی
کارتها و طرحبندی داشبورد پالس ممکن است با انتشار نمای داشبورد پیکربندی شود. نمای داشبورد به آدرس زیر منتشر خواهد شد
resources/views/vendor/pulse/dashboard.blade.php
:
php artisan vendor:publish --tag=pulse-dashboard
داشبورد توسط Livewire پشتیبانی میشود و به شما امکان میدهد کارتها و طرحبندی را بدون نیاز به بازسازی هیچ گونه دارایی جاوا اسکریپت سفارشی کنید.
در این فایل،
<x-pulse>
کامپوننت وظیفه رندر کردن داشبورد را بر عهده دارد و یک طرح بندی شبکه ای برای کارت ها ارائه می کند. اگر میخواهید داشبورد تمام عرض صفحه را بپوشاند، میتوانید پایهای را
full-width
برای مؤلفه فراهم کنید:
<x-pulse full-width> ...</x-pulse>
به طور پیشفرض،
<x-pulse>
کامپوننت یک شبکه ۱۲ ستونی ایجاد میکند، اما میتوانید با استفاده از
cols
پروپوزال آن را سفارشی کنید:
<x-pulse cols="16"> ...</x-pulse>
هر کارت
برای کنترل فضا و موقعیت یابی یک
cols
و پایه می پذیرد:
rows
<livewire:pulse.usage cols="4" rows="2" />
بیشتر کارتها
expand
به جای اسکرول کردن، یک پایه برای نمایش کارت کامل میپذیرند:
<livewire:pulse.slow-queries expand />
حل و فصل کاربران
برای کارتهایی که اطلاعات کاربران شما را نشان میدهند، مانند کارت استفاده از برنامه، Pulse فقط شناسه کاربر را ثبت میکند. هنگام رندر کردن داشبورد، Pulse فیلدهای
name
و
email
را از
Authenticatable
مدل پیشفرض شما حل میکند و آواتارها را با استفاده از وب سرویس Gravatar نمایش میدهد.
می توانید فیلدها و آواتار را با فراخوانی
Pulse::user
متد در کلاس برنامه خود سفارشی کنید
App\Providers\AppServiceProvider
.
این
user
روش یک بسته را می پذیرد که مدل نمایش داده شده را دریافت می کند
Authenticatable
و باید یک آرایه حاوی
name
،
extra
و
avatar
اطلاعات را برای کاربر برگرداند:
use Laravel\Pulse\Facades\Pulse; /** * Bootstrap any application services. */public function boot(): void{ Pulse::user(fn ($user) => [ 'name' => $user->name, 'extra' => $user->email, 'avatar' => $user->avatar_url, ]); // ...}
شما میتوانید با پیادهسازی قرارداد و اتصال آن در کانتینر سرویس
Laravel\Pulse\Contracts\ResolvesUsers
لاراول، نحوه ضبط و بازیابی کاربر احراز هویت شده را کاملاً سفارشی کنید .
کارت ها
سرورها
کارت
<livewire:pulse.servers />
استفاده از منابع سیستم را برای همه سرورهایی که
pulse:check
فرمان را اجرا می کنند نشان می دهد. لطفاً برای اطلاعات بیشتر در مورد گزارش منابع سیستم به مستندات مربوط به
ضبط کننده سرورها
مراجعه کنید .
استفاده از برنامه
این
<livewire:pulse.usage />
کارت 10 کاربر برتر را نشان می دهد که درخواست هایی را برای برنامه شما ارسال می کنند، کارها را ارسال می کنند و درخواست های کندی را تجربه می کنند.
اگر میخواهید همه معیارهای استفاده را همزمان روی صفحه مشاهده کنید، میتوانید کارت را چندین بار اضافه کنید و
type
ویژگی را مشخص کنید:
<livewire:pulse.usage type="requests" /><livewire:pulse.usage type="slow_requests" /><livewire:pulse.usage type="jobs" />
برای یادگیری نحوه سفارشی کردن نحوه بازیابی و نمایش اطلاعات کاربر Pulse، به مستندات ما در مورد حل کردن کاربران مراجعه کنید .
اگر برنامه شما درخواست های زیادی دریافت می کند یا کارهای زیادی را ارسال می کند، ممکن است بخواهید نمونه برداری را فعال کنید . برای اطلاعات بیشتر به مستندات ضبط کننده درخواست های کاربر ، ضبط کننده مشاغل کاربر و ضبط کننده مشاغل آهسته مراجعه کنید .
استثناها
کارت
<livewire:pulse.exceptions />
فراوانی و تازگی استثناهایی را که در برنامه شما رخ می دهد را نشان می دهد. به طور پیش فرض، استثناها بر اساس کلاس استثنا و مکانی که در آن رخ داده است، گروه بندی می شوند.
برای اطلاعات بیشتر به مستندات
ضبط استثناها
مراجعه کنید .
صف ها
این
<livewire:pulse.queues />
کارت ظرفیت صفهای موجود در برنامه شما را نشان میدهد، از جمله تعداد مشاغل در صف، پردازش، پردازش، انتشار و ناموفق.
برای اطلاعات بیشتر به مستندات
ضبط صف
مراجعه کنید .
درخواست های آهسته
کارت
<livewire:pulse.slow-requests />
درخواستهای ورودی را به برنامه شما نشان میدهد که از آستانه پیکربندیشده که بهطور پیشفرض 1000 میلیثانیه است، فراتر میرود.
برای اطلاعات بیشتر به مستندات
ضبط کننده درخواست های کند
مراجعه کنید .
مشاغل آهسته
این
<livewire:pulse.slow-jobs />
کارت کارهای صف در برنامه شما را نشان می دهد که از آستانه پیکربندی شده که به طور پیش فرض 1000 میلی ثانیه است بیشتر است.
برای اطلاعات بیشتر به مستندات
ضبط مشاغل کند
مراجعه کنید .
پرس و جوهای آهسته
کارت
<livewire:pulse.slow-queries />
درخواست های پایگاه داده را در برنامه شما نشان می دهد که از آستانه پیکربندی شده که به طور پیش فرض 1000 میلی ثانیه است بیشتر است.
به طور پیش فرض، پرس و جوهای کند بر اساس پرس و جوی SQL (بدون پیوند) و مکانی که در آن رخ داده است گروه بندی می شوند، اما اگر می خواهید صرفاً در پرس و جوی SQL گروه بندی کنید، ممکن است انتخاب کنید که مکان را ضبط نکنید.
برای اطلاعات بیشتر به مستندات ضبط پرس و جوهای کند مراجعه کنید .
درخواست های خروجی کند
این کارت درخواستهای خروجی را که با استفاده از
کلاینت HTTP
<livewire:pulse.slow-outgoing-requests />
لاراول انجام شده است را نشان میدهد
که از آستانه پیکربندی شده که بهطور پیشفرض 1000 میلیثانیه است، فراتر میرود.
به طور پیش فرض، ورودی ها بر اساس URL کامل گروه بندی می شوند. با این حال، ممکن است بخواهید درخواست های خروجی مشابه را با استفاده از عبارات منظم عادی یا گروه بندی کنید. برای اطلاعات بیشتر به مستندات ضبط کننده درخواست های خروجی آهسته مراجعه کنید .
حافظه پنهان
کارت
<livewire:pulse.cache />
آمار ضربه و عدم دسترسی به حافظه پنهان را برای برنامه شما، چه در سطح جهانی و چه برای کلیدهای جداگانه، نشان می دهد.
به طور پیش فرض، ورودی ها بر اساس کلید گروه بندی می شوند. با این حال، ممکن است بخواهید کلیدهای مشابه را با استفاده از عبارات منظم عادی یا گروه بندی کنید. برای اطلاعات بیشتر به مستندات ضبط کننده تعاملات حافظه پنهان مراجعه کنید .
ثبت ورودی ها
اکثر ضبط کننده های پالس به طور خودکار ورودی ها را بر اساس رویدادهای چارچوب ارسال شده توسط لاراول ضبط می کنند. با این حال،
ضبط کننده سرور
و برخی از کارت های شخص ثالث باید به طور منظم برای اطلاعات نظرسنجی کنند. برای استفاده از این کارتها، باید
pulse:check
دیمون را روی همه سرورهای برنامه شخصی خود اجرا کنید:
php artisan pulse:check
برای
pulse:check
اجرای دائمی فرآیند در پسزمینه، باید از یک مانیتور فرآیند مانند Supervisor استفاده کنید تا اطمینان حاصل کنید که اجرای دستور متوقف نمیشود.
از آنجایی که
pulse:check
فرمان یک فرآیند طولانی مدت است، بدون راه اندازی مجدد، تغییراتی را در پایگاه کد شما مشاهده نخواهد کرد. شما باید با فراخوانی دستور
pulse:restart
در طول فرآیند استقرار برنامه خود، فرمان را مجدداً راه اندازی کنید:
php artisan pulse:restart
Pulse از حافظه پنهان برای ذخیره سیگنالهای راهاندازی مجدد استفاده میکند، بنابراین قبل از استفاده از این ویژگی باید بررسی کنید که درایور حافظه پنهان برای برنامه شما به درستی پیکربندی شده است.
ضبط کننده ها
ضبطکنندهها مسئول ثبت ورودیهای برنامه شما هستند تا در پایگاه داده پالس ثبت شوند. ضبط کننده ها در
recorders
بخش
فایل پیکربندی پالس
ثبت و پیکربندی می شوند
.
تعاملات حافظه پنهان
ضبط
CacheInteractions
کننده اطلاعات مربوط به
بازدیدها و عدم دسترسی به
حافظه پنهان در برنامه شما را برای نمایش در کارت
حافظه
ذخیره می کند .
می توانید به صورت اختیاری نرخ نمونه را تنظیم کنید و الگوهای کلیدی را نادیده بگیرید.
همچنین می توانید گروه بندی کلیدها را طوری پیکربندی کنید که کلیدهای مشابه به عنوان یک ورودی گروه بندی شوند. برای مثال، ممکن است بخواهید شناسههای منحصربهفرد را از کلیدهایی که همان نوع اطلاعات را در حافظه پنهان ذخیره میکنند حذف کنید. گروه ها با استفاده از یک عبارت منظم برای "یافتن و جایگزینی" بخش هایی از کلید پیکربندی می شوند. یک مثال در فایل پیکربندی موجود است:
Recorders\CacheInteractions::class => [ // ... 'groups' => [ // '/:\d+/' => ':*', ],],
اولین الگویی که مطابقت دارد استفاده خواهد شد. اگر هیچ الگوی مطابقت نداشته باشد، کلید همانطور که هست گرفته می شود.
استثناها
ضبط
Exceptions
کننده اطلاعاتی را در مورد استثناهای قابل گزارشی که در برنامه شما رخ می دهد را برای نمایش در کارت
استثنا
ضبط می کند .
میتوانید به صورت اختیاری نرخ نمونه و الگوهای استثنا را نادیده بگیرید. همچنین میتوانید پیکربندی کنید که آیا مکانی که استثنا از آن منشأ گرفته است را ضبط کنید. مکان ضبط شده در داشبورد Pulse نمایش داده می شود که می تواند به ردیابی منشاء استثنا کمک کند. با این حال، اگر یک استثنا در چندین مکان رخ دهد، برای هر مکان منحصر به فرد چندین بار ظاهر می شود.
صف ها
ضبط
Queues
کننده اطلاعاتی را در مورد صف های برنامه های شما برای نمایش در
صف
ضبط می کند .
می توانید به صورت اختیاری نرخ نمونه و الگوهای مشاغل نادیده گرفته شده را تنظیم کنید.
مشاغل آهسته
ضبط
SlowJobs
کننده اطلاعات مربوط به کارهای آهسته در برنامه شما را برای نمایش در کارت
Slow Jobs
ضبط می کند .
می توانید به صورت اختیاری آستانه کار آهسته، نرخ نمونه و الگوهای شغل نادیده گرفته شده را تنظیم کنید.
درخواست های خروجی کند
ضبط کننده اطلاعاتی را در مورد درخواست های HTTP خروجی که با استفاده از
کلاینت HTTP
SlowOutgoingRequests
لاراول انجام شده است، ضبط می کند
که از آستانه پیکربندی شده برای نمایش در کارت
درخواست های آهسته خروجی
فراتر می رود .
میتوانید به صورت اختیاری آستانه درخواست خروجی کند، نرخ نمونه و الگوهای URL نادیده گرفته شده را تنظیم کنید.
همچنین می توانید گروه بندی URL را طوری پیکربندی کنید که URL های مشابه به عنوان یک ورودی گروه بندی شوند. به عنوان مثال، ممکن است بخواهید شناسه های منحصر به فرد را از مسیرهای URL یا گروه بر اساس دامنه حذف کنید. گروه ها با استفاده از یک عبارت معمولی برای "یافتن و جایگزینی" بخش هایی از URL پیکربندی می شوند. چند نمونه در فایل پیکربندی موجود است:
Recorders\OutgoingRequests::class => [ // ... 'groups' => [ // '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*', // '#^https?://([^/]*).*$#' => '\1', // '#/\d+#' => '/*', ],],
اولین الگویی که مطابقت دارد استفاده خواهد شد. اگر هیچ الگوی مطابقت نداشته باشد، URL همانطور که هست ثبت می شود.
پرس و جوهای آهسته
ضبط
SlowQueries
کننده هر درخواست پایگاه داده در برنامه شما را که از آستانه پیکربندی شده برای نمایش در کارت
Slow Queries
فراتر می رود، ضبط می کند .
می توانید به صورت اختیاری آستانه پرس و جو کند، نرخ نمونه و الگوهای پرس و جو نادیده گرفته شده را تنظیم کنید. همچنین میتوانید پیکربندی کنید که آیا مکان پرس و جو گرفته شود یا خیر. مکان ضبط شده در داشبورد Pulse نمایش داده می شود که می تواند به ردیابی منشاء پرس و جو کمک کند. با این حال، اگر یک پرس و جو در چندین مکان انجام شود، برای هر مکان منحصر به فرد چندین بار ظاهر می شود.
درخواست های آهسته
ضبط
Requests
کننده اطلاعات درخواستهایی را که به برنامه شما برای نمایش در کارتهای
درخواستهای آهسته
و
استفاده از برنامه ارسال
شده است، ضبط میکند .
میتوانید به صورت اختیاری آستانه مسیر کند، نرخ نمونه و مسیرهای نادیده گرفته شده را تنظیم کنید.
سرورها
ضبط
Servers
کننده استفاده از CPU، حافظه و ذخیره سازی سرورهایی را که برنامه شما را برای نمایش روی کارت
سرور
نیرو می دهند، ضبط می کند . این ضبط کننده نیاز دارد که
pulse:check
دستور
روی هر یک از سرورهایی که می خواهید نظارت کنید اجرا شود.
هر سرور گزارشگر باید یک نام منحصر به فرد داشته باشد. به طور پیش فرض، Pulse از مقدار بازگردانده شده توسط
gethostname
تابع PHP استفاده می کند. اگر می خواهید این را سفارشی کنید، می توانید
PULSE_SERVER_NAME
متغیر محیط را تنظیم کنید:
PULSE_SERVER_NAME=load-balancer
فایل پیکربندی Pulse همچنین به شما اجازه میدهد تا دایرکتوریهایی را که نظارت میشوند سفارشی کنید.
مشاغل کاربر
ضبط
UserJobs
کننده اطلاعات مربوط به کاربرانی را که کارها را در برنامه شما ارسال می کنند برای نمایش در کارت
استفاده از برنامه
ضبط می کند .
می توانید به صورت اختیاری نرخ نمونه و الگوهای شغلی نادیده گرفته شده را تنظیم کنید.
درخواست های کاربر
ضبط
UserRequests
کننده اطلاعات مربوط به کاربرانی را که از برنامه شما درخواست می کنند برای نمایش در کارت
استفاده از برنامه
ضبط می کند .
می توانید به صورت اختیاری نرخ نمونه و الگوهای شغلی نادیده گرفته شده را تنظیم کنید.
فیلتر کردن
همانطور که دیدیم، بسیاری از
ضبطکنندهها
توانایی «نادیده گرفتن» ورودیهای ورودی را بر اساس مقدارشان، مانند URL درخواست، از طریق پیکربندی ارائه میکنند. اما، گاهی اوقات ممکن است فیلتر کردن رکوردها بر اساس عوامل دیگر مانند کاربر تأیید شده فعلی مفید باشد. برای فیلتر کردن این رکوردها، ممکن است روش Pulse را ببندید
filter
. به طور معمول، روش باید در
متد برنامه شما
filter
فراخوانی شود
:
boot
AppServiceProvider
use Illuminate\Support\Facades\Auth;use Laravel\Pulse\Entry;use Laravel\Pulse\Facades\Pulse;use Laravel\Pulse\Value; /** * Bootstrap any application services. */public function boot(): void{ Pulse::filter(function (Entry|Value $entry) { return Auth::user()->isNotAdmin(); }); // ...}
کارایی
Pulse به گونه ای طراحی شده است که بدون نیاز به زیرساخت های اضافی وارد یک برنامه کاربردی موجود شود. با این حال، برای برنامههای پرترافیک، راههای مختلفی برای از بین بردن هرگونه تأثیری که پالس ممکن است بر عملکرد برنامه شما داشته باشد، وجود دارد.
استفاده از یک پایگاه داده متفاوت
برای برنامه های پرترافیک، ممکن است ترجیح دهید از یک اتصال پایگاه داده اختصاصی برای Pulse استفاده کنید تا از تأثیرگذاری بر پایگاه داده برنامه خود جلوگیری کنید.
می توانید
اتصال پایگاه داده
مورد استفاده توسط پالس را با تنظیم
PULSE_DB_CONNECTION
متغیر محیطی سفارشی کنید.
PULSE_DB_CONNECTION=pulse
Redis Ingest
Redis Ingest به Redis 6.2 یا بالاتر و
phpredis
یاpredis
به عنوان درایور مشتری Redis پیکربندی شده برنامه نیاز دارد.
به طور پیش فرض، Pulse ورودی ها را مستقیماً به
اتصال پایگاه داده پیکربندی شده
پس از ارسال پاسخ HTTP به مشتری یا پردازش یک کار ذخیره می کند. با این حال، میتوانید از درایور دریافت Redis پالس برای ارسال ورودیها به یک جریان Redis استفاده کنید. این را می توان با پیکربندی
PULSE_INGEST_DRIVER
متغیر محیط فعال کرد:
PULSE_INGEST_DRIVER=redis
Pulse به طور پیشفرض از اتصال Redis
پیشفرض شما استفاده میکند
، اما میتوانید آن را از طریق
PULSE_REDIS_CONNECTION
متغیر محیطی سفارشی کنید:
PULSE_REDIS_CONNECTION=pulse
هنگام استفاده از Redis ingest، باید
pulse:work
دستور نظارت بر جریان و انتقال ورودیها از Redis به جداول پایگاه داده Pulse را اجرا کنید.
php artisan pulse:work
برای اینکه
pulse:work
فرآیند بهطور دائم در پسزمینه اجرا شود، باید از یک مانیتور فرآیند مانند Supervisor استفاده کنید تا مطمئن شوید که Pulse worker از کار کردن متوقف نمیشود.
از آنجایی که
pulse:work
فرمان یک فرآیند طولانی مدت است، بدون راه اندازی مجدد، تغییراتی را در پایگاه کد شما مشاهده نخواهد کرد. شما باید با فراخوانی دستور
pulse:restart
در طول فرآیند استقرار برنامه خود، فرمان را مجدداً راه اندازی کنید:
php artisan pulse:restart
Pulse از حافظه پنهان برای ذخیره سیگنالهای راهاندازی مجدد استفاده میکند، بنابراین قبل از استفاده از این ویژگی باید بررسی کنید که درایور حافظه پنهان برای برنامه شما به درستی پیکربندی شده است.
نمونه برداری
به طور پیشفرض، Pulse هر رویداد مرتبطی را که در برنامه شما رخ میدهد، ثبت میکند. برای برنامه های پرترافیک، این امر می تواند منجر به نیاز به جمع آوری میلیون ها ردیف پایگاه داده در داشبورد شود، به خصوص برای دوره های زمانی طولانی تر.
در عوض، میتوانید «نمونهگیری» را در برخی از ضبطکنندههای داده پالس فعال کنید. به عنوان مثال، تنظیم نرخ نمونه بر
0.1
روی
User Requests
ضبط کننده به این معنی است که شما فقط 10٪ از درخواست ها را به برنامه خود ضبط می کنید. در داشبورد، مقادیر بزرگتر میشوند و با پیشوند a
~
نشان میدهند که تقریبی هستند.
به طور کلی، هرچه تعداد ورودیهای بیشتری برای یک معیار خاص داشته باشید، میتوانید با خیال راحت نرخ نمونه را بدون کاهش دقت زیاد تنظیم کنید.
پیرایش
هنگامی که Pulse در خارج از پنجره داشبورد قرار گرفت، ورودی های ذخیره شده خود را به طور خودکار برش می دهد. برش زمانی اتفاق میافتد که دادهها را با استفاده از یک سیستم قرعهکشی که ممکن است در فایل پیکربندی Pulse سفارشیسازی شود، مصرف میکند .
رسیدگی به موارد استثنای پالس
اگر هنگام گرفتن دادههای Pulse استثنایی رخ دهد، مانند عدم اتصال به پایگاه داده ذخیرهسازی، Pulse بیصدا نمیتواند از تأثیرگذاری بر برنامه شما جلوگیری کند.
اگر میخواهید نحوه رسیدگی به این استثنائات را سفارشی کنید، میتوانید روش را بسته کنید
handleExceptionsUsing
:
use Laravel\Pulse\Facades\Pulse;use Illuminate\Support\Facades\Log; Pulse::handleExceptionsUsing(function ($e) { Log::debug('An exception happened in Pulse', [ 'message' => $e->getMessage(), 'stack' => $e->getTraceAsString(), ]);});
کارت های سفارشی
پالس به شما امکان می دهد کارت های سفارشی بسازید تا داده های مربوط به نیازهای خاص برنامه خود را نمایش دهید. Pulse از Livewire استفاده می کند ، بنابراین ممکن است بخواهید اسناد آن را قبل از ساخت اولین کارت سفارشی خود مرور کنید.
اجزای کارت
ایجاد یک کارت سفارشی در Laravel Pulse با گسترش
Card
کامپوننت Livewire پایه و تعریف نمای مربوطه شروع می شود:
namespace App\Livewire\Pulse; use Laravel\Pulse\Livewire\Card;use Livewire\Attributes\Lazy; #[Lazy]class TopSellers extends Card{ public function render() { return view('livewire.pulse.top-sellers'); }}
هنگام استفاده از ویژگی
بارگذاری تنبل
Livewire ،
Card
کامپوننت به طور خودکار یک مکان نگهدار ارائه می دهد که به ویژگی ها
cols
و
rows
ویژگی های ارسال شده به مؤلفه شما احترام می گذارد.
هنگام نوشتن نمای متناظر کارت پالس خود، می توانید از اجزای Pulse's Blade برای ظاهر و احساس ثابت استفاده کنید:
<x-pulse::card :cols="$cols" :rows="$rows" :class="$class" wire:poll.5s=""> <x-pulse::card-header name="Top Sellers"> <x-slot:icon> ... </x-slot:icon> </x-pulse::card-header> <x-pulse::scroll :expand="$expand"> ... </x-pulse::scroll></x-pulse::card>
متغیرها
$cols
،،،
و باید به اجزای Blade مربوطه
$rows
خود
منتقل شوند تا طرح بندی کارت از نمای داشبورد سفارشی شود. همچنین ممکن است بخواهید
ویژگی را در نمای خود قرار دهید تا کارت به طور خودکار به روز شود.
$class
$expand
wire:poll.5s=""
هنگامی که جزء و الگوی Livewire خود را تعریف کردید، کارت ممکن است در نمای داشبورد شما قرار گیرد :
<x-pulse> ... <livewire:pulse.top-sellers cols="4" /></x-pulse>
اگر کارت شما در یک بسته گنجانده شده است، باید با استفاده از
Livewire::component
روش، کامپوننت را در Livewire ثبت کنید.
طراحی ظاهر
اگر کارت شما به استایل اضافی فراتر از کلاس ها و اجزای موجود در Pulse نیاز دارد، چند گزینه برای گنجاندن CSS سفارشی برای کارت های شما وجود دارد.
ادغام لاراول وایت
اگر کارت سفارشی شما در پایه کد برنامه شما زندگی می کند و از ادغام لاراول Vite
استفاده می کنید
، می توانید
vite.config.js
فایل خود را به روز کنید تا یک نقطه ورودی CSS اختصاصی برای کارت خود داشته باشید:
laravel({ input: [ 'resources/css/pulse/top-sellers.css', // ... ],}),
سپس می توانید از
@vite
دستورالعمل Blade در
نمای داشبورد
خود استفاده کنید و نقطه ورودی CSS را برای کارت خود مشخص کنید:
<x-pulse> @vite('resources/css/pulse/top-sellers.css') ...</x-pulse>
فایل های CSS
برای موارد استفاده دیگر، از جمله کارتهای Pulse موجود در یک بسته، میتوانید به Pulse دستور دهید تا با تعریف روشی
css
در مؤلفه Livewire، به Pulse دستور دهید که شیوه نامههای اضافی را بارگیری کند.
class TopSellers extends Card{ // ... protected function css() { return __DIR__.'/../../dist/top-sellers.css'; }}
هنگامی که این کارت در داشبورد قرار می گیرد، Pulse به طور خودکار محتویات این فایل را در یک
<style>
برچسب قرار می دهد، بنابراین نیازی به انتشار آن در فهرست نیست
public
.
Tailwind CSS
هنگام استفاده از Tailwind CSS، باید یک فایل پیکربندی اختصاصی Tailwind ایجاد کنید تا از بارگیری CSS غیرضروری یا تضاد با کلاسهای Tailwind Pulse جلوگیری کنید:
export default { darkMode: 'class', important: '#top-sellers', content: [ './resources/views/livewire/pulse/top-sellers.blade.php', ], corePlugins: { preflight: false, },};
سپس می توانید فایل پیکربندی را در نقطه ورودی CSS خود مشخص کنید:
@config "../../tailwind.top-sellers.config.js";@tailwind base;@tailwind components;@tailwind utilities;
همچنین باید یک
id
یا ویژگی را در نمای کارت خود بگنجانید که با انتخابگر ارسال شده به
استراتژی انتخابگر
class
Tailwind مطابقت دارد
:
important
<x-pulse::card id="top-sellers" :cols="$cols" :rows="$rows" class="$class"> ...</x-pulse::card>
جمع آوری و جمع آوری داده ها
کارت های سفارشی ممکن است داده ها را از هر کجا واکشی و نمایش دهند. با این حال، ممکن است بخواهید از سیستم ضبط و تجمیع داده قدرتمند و کارآمد Pulse استفاده کنید.
ثبت ورودی ها
Pulse به شما اجازه می دهد تا با استفاده از روش زیر "ورودی ها" را ضبط کنید
Pulse::record
:
use Laravel\Pulse\Facades\Pulse; Pulse::record('user_sale', $user->id, $sale->amount) ->sum() ->count();
اولین آرگومان ارائه شده به روش
برای ورودیی
record
است که ثبت می کنید، در حالی که آرگومان دوم
تعیین می کند که چگونه داده های انبوه باید گروه بندی شوند. برای بیشتر روشهای تجمیع، باید a را نیز مشخص کنید
تا انباشته شود. در مثال بالا، مقدار جمع آوری شده برابر است
. سپس میتوانید یک یا چند روش تجمیع (مانند
) را فراخوانی کنید تا Pulse بتواند مقادیر از پیش تجمیعشده را در «سطلها» برای بازیابی کارآمد بعداً جمعآوری کند.
type
key
value
$sale->amount
sum
روش های تجمیع موجود عبارتند از:
-
avg
-
count
-
max
-
min
-
sum
هنگام ساخت یک بسته کارتی که شناسه کاربری تأیید شده فعلی را ضبط می کند، باید از روشی استفاده کنید
Pulse::resolveAuthenticatedUserId()
که به هر گونه سفارشی سازی حل کننده کاربر در برنامه کاربردی احترام می گذارد.
بازیابی داده های کل
Card
هنگام گسترش مؤلفه Livewire
Pulse ، میتوانید از
aggregate
روش برای بازیابی دادههای انبوه برای دورهای که در داشبورد مشاهده میشود استفاده کنید:
class TopSellers extends Card{ public function render() { return view('livewire.pulse.top-sellers', [ 'topSellers' => $this->aggregate('user_sale', ['sum', 'count']); ]); }}
متد
aggregate
مجموعه ای از
stdClass
اشیاء PHP را برمی گرداند. هر شی شامل
key
ویژگی ثبت شده قبلی، همراه با کلیدهای هر یک از مجموعه های درخواستی می شود:
@foreach ($topSellers as $seller) {{ $seller->key }} {{ $seller->sum }} {{ $seller->count }}@endforeach
پالس در وهله اول داده ها را از سطل های از پیش تجمیع شده بازیابی می کند. بنابراین، سنگدانه های مشخص شده باید با استفاده از این روش از قبل گرفته شده باشند
Pulse::record
. قدیمیترین سطل معمولاً تا حدی خارج از دوره قرار میگیرد، بنابراین Pulse قدیمیترین ورودیها را برای پر کردن شکاف جمعآوری میکند و مقدار دقیقی را برای کل دوره ارائه میکند، بدون اینکه نیازی به تجمیع کل دوره در هر درخواست نظرسنجی باشد.
همچنین می توانید با استفاده از روش، مقدار کل را برای یک نوع معین بازیابی کنید
aggregateTotal
. به عنوان مثال، روش زیر به جای گروهبندی آنها بر اساس کاربر، کل فروشهای کاربران را بازیابی میکند.
$total = $this->aggregateTotal('user_sale', 'sum');
نمایش کاربران
هنگام کار با مجموعه هایی که شناسه کاربری را به عنوان کلید ثبت می کنند، می توانید کلیدهای سوابق کاربر را با استفاده از
Pulse::resolveUsers
روش زیر حل کنید:
$aggregates = $this->aggregate('user_sale', ['sum', 'count']); $users = Pulse::resolveUsers($aggregates->pluck('key')); return view('livewire.pulse.top-sellers', [ 'sellers' => $aggregates->map(fn ($aggregate) => (object) [ 'user' => $users->find($aggregate->key), 'sum' => $aggregate->sum, 'count' => $aggregate->count, ])]);
این
find
روش یک شی شامل، و کلیدها را برمی گرداند
name
که
extra
می
avatar
توانید به صورت اختیاری آنها را مستقیماً به
<x-pulse::user-card>
جزء Blade ارسال کنید:
<x-pulse::user-card :user="{{ $seller->user }}" :stats="{{ $seller->sum }}" />
ضبط کننده های سفارشی
نویسندگان بسته ممکن است بخواهند کلاس های ضبط کننده را ارائه دهند تا به کاربران اجازه دهند تا ضبط داده ها را پیکربندی کنند.
ضبط کننده ها در
recorders
بخش فایل پیکربندی برنامه ثبت می شوند
config/pulse.php
:
[ // ... 'recorders' => [ Acme\Recorders\Deployments::class => [ // ... ], // ... ],]
ضبط کننده ها ممکن است با مشخص کردن یک
$listen
ویژگی به رویدادها گوش دهند. Pulse به طور خودکار شنوندگان را ثبت می کند و
record
روش ضبط کننده را فراخوانی می کند:
<?php namespace Acme\Recorders; use Acme\Events\Deployment;use Illuminate\Support\Facades\Config;use Laravel\Pulse\Facades\Pulse; class Deployments{ /** * The events to listen for. * * @var array<int, class-string> */ public array $listen = [ Deployment::class, ]; /** * Record the deployment. */ public function record(Deployment $event): void { $config = Config::get('pulse.recorders.'.static::class); Pulse::record( // ... ); }}