Skip to the content.

فصل ۶: مباحث پیشرفته

این فصل به بررسی برخی از قابلیت‌های پیشرفته‌تر و کلاس‌های کمکی PrestaSDK می‌پردازد که به شما در توسعه ماژول‌های پیچیده‌تر کمک می‌کنند.

۶.۱. مدیریت Asset ها (CSS/JS)

یکی از چالش‌های رایج در توسعه وب، مدیریت کش مرورگر برای فایل‌های CSS و JavaScript است. PrestaSDK این مشکل را با یک سیستم خودکار حل کرده است.

AssetPublisher و نسخه‌بندی خودکار

کلاس AssetPublisher وظیفه دارد تا فایل‌های prestasdk.css و prestasdk.js را از داخل پوشه vendor به پوشه views/css و views/js ماژول شما کپی کند. این کار هنگام نصب ماژول انجام می‌شود. مهم‌تر از آن، متد setMedia() در AdminController به صورت خودکار این فایل‌ها را به صفحات اضافه می‌کند و یک شماره نسخه به انتهای URL آن‌ها اضافه می‌کند (مثلاً ?v=0.4.0). این شماره نسخه از فایل composer.json خود SDK خوانده می‌شود. این فرآیند چه مزیتی دارد؟ هر زمان که شما نسخه PrestaSDK را از طریق Composer بروزرسانی کنید، شماره نسخه در URL فایل‌ها تغییر می‌کند. این کار باعث می‌شود که مرورگر کاربران مجبور شود نسخه جدید فایل‌ها را دانلود کند و مشکل کش به طور کامل حل شود. اگر نسخه SDK تغییر کرده باشد، AdminController به صورت خودکار AssetPublisher را مجدداً فراخوانی می‌کند تا فایل‌های جدید جایگزین شوند.

۶.۲. چرخه درخواست و Middleware ها

PanelCore (که در AdminController استفاده می‌شود) یک سیستم قدرتمند شبیه به Middleware برای مدیریت چرخه حیات درخواست‌ها (Request Lifecycle) ارائه می‌دهد. این سیستم به شما اجازه می‌دهد تا کدهایی را قبل یا بعد از اجرای منطق اصلی یک “بخش” (Section) اجرا کنید. این قابلیت برای مواردی مانند اعتبارسنجی دسترسی‌ها، پردازش داده‌های POST قبل از نمایش فرم، یا بارگذاری داده‌های مشترک بین چند بخش بسیار مفید است.

نحوه استفاده از middlewaresACL

برای استفاده از این قابلیت، باید پراپرتی $middlewaresACL را در کنترلر خود تعریف کنید. این پراپرتی یک آرایه است که مشخص می‌کند کدام متدها (Middleware ها) باید در چه زمانی اجرا شوند. ساختار آرایه: $this->middlewaresACL = [ ‘before’ => [ // ‘بخش@کنترلر’ => [‘نام_میدلور۱’, ‘نام_میدلور۲’], ], ‘after’ => [], ‘ignore’ => [], // برای نادیده گرفتن یک میدلور در شرایط خاص ];

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

VersionHelper

این کلاس یک متد استاتیک به نام getSDKVersion() دارد که نسخه فعلی SDK را از فایل composer.json آن می‌خواند. این کلاس به طور داخلی توسط AssetPublisher استفاده می‌شود.