ifnex/04_Laravel/app/Providers/AppServiceProvider.php
Kazem Alghasi f11dfa87dc fix(view): register filament.pages namespace for Resource views
Pages in app/Filament/Resources/*/Pages/ with view='filament.pages.xxx'
keep their blade files in app/Filament/Resources/views/, not in the
default resources/views/filament/pages/. Add the path to the view
finder so Laravel can locate them without requiring each Resource's
view to be copied to resources/views/.
2026-10-29 16:07:17 +03:30

79 lines
3.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use App\Models\Shipment;
use App\Observers\ShipmentObserver;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
// هک برای رفع مشکل دیسک اکسل در لاراول ۱۱/۱۲
config(['excel.temporary_files.disk' => 'local']);
// ─── ثبت مسیر view برای صفحات Filament Resource ───
// صفحاتی که در app/Filament/Resources/*/Pages هستند و view='filament.pages.xxx'
// دارند، blade خودشان را در app/Filament/Resources/views/ نگه می‌دارند.
// این خط به Laravel می‌گوید علاوه بر resources/views/filament/pages/،
// این مسیر را هم برای namespace 'filament.pages' جستجو کند.
view()->addNamespace('filament.pages', app_path('Filament/Resources/views'));
// ثبت Observer برای اطلاعیه‌های تغییر سفارش
Shipment::observe(ShipmentObserver::class);
// Explicitly require the IFNEX number helper file so
// ifnex_format_number() / ifnex_persian_digits() / ifnex_trend_percent()
// are available even before `composer dump-autoload` is re-run.
$helperPath = base_path('app/Helpers/number.php');
if (is_file($helperPath)) {
require_once $helperPath;
}
// ─── Rate Limiting برای APIهای حساس ───
RateLimiter::for('auth', function (Request $request) {
// لاگین: ۵ درخواست در دقیقه per IP (جلوگیری از brute-force)
return Limit::perMinute(5)->by($request->ip());
});
RateLimiter::for('sms', function (Request $request) {
// ارسال کد پیامکی: ۱ درخواست در دقیقه per شماره موبایل
return Limit::perMinute(1)->by($request->input('phone') ?: $request->ip());
});
RateLimiter::for('public', function (Request $request) {
// API عمومی (رهگیری، استعلام قیمت): ۳۰ درخواست در دقیقه per IP
return Limit::perMinute(30)->by($request->ip());
});
RateLimiter::for('customer', function (Request $request) {
// API مشتری (لاگین‌شده): ۶۰ درخواست در دقیقه per user
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
RateLimiter::for('wallet', function (Request $request) {
// عملیات مالی حساس (پرداخت، شارژ، freeze): ۳۰ درخواست در دقیقه per user
return Limit::perMinute(30)->by($request->user()?->id ?: $request->ip());
});
RateLimiter::for('staff', function (Request $request) {
// API کارمند: ۶۰ درخواست در دقیقه per user
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
}
}