مارک پلاس

تکنولوژی نوین اینترنتی

متغیرهای سراسری در ویوها

دسته‌بندی‌ها

متغیرهای سراسری در ویوها
متغیرهای سراسری در ویوها

در لاراول، برای استفاده از متغیرهای سراسری در تمام ویوها (global variables in views)، چند روش مختلف وجود داره که می‌تونی بسته به نیازت انتخاب کنی. این متغیرها می‌تونن اطلاعاتی مثل تنظیمات سایت، اطلاعات کاربر، یا داده‌های ثابت مثل دسته‌بندی‌ها باشن.


✅ روش ۱: استفاده از View Composer (مناسب‌ترین روش)

View Composerها بهت اجازه می‌دن که هنگام رندر شدن ویو، داده‌هایی به اون ارسال کنی—چه برای یک ویو خاص، چه برای همه ویوها.

🛠 گام ۱: ساخت فایل Service Provider

bash
php artisan make:provider ViewServiceProvider

🛠 گام ۲: ثبت در config/app.php

در آرایه‌ی providers:

php
App\Providers\ViewServiceProvider::class,

🛠 گام ۳: تعریف داده‌ی سراسری

در app/Providers/ViewServiceProvider.php:

php
use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class ViewServiceProvider extends ServiceProvider { public function boot() { // ارسال متغیر سراسری به تمام ویوها View::share('site_name', 'سایت من'); // ارسال دسته‌بندی‌ها به همه ویوها View::composer('*', function ($view) { $categories = \App\Models\Category::all(); $view->with('categories', $categories); }); } }

💡 حالا در هر ویویی می‌تونی بنویسی:

blade
<h1>به {{ $site_name }} خوش آمدید</h1> <ul> @foreach($categories as $cat) <li>{{ $cat->name }}</li> @endforeach </ul>

✅ روش ۲: ارسال دستی از کنترلر به همه ویوها

اگر بخوای همه‌ی کنترلرها یک متغیر خاص رو به ویو بفرستن:

گام ۱: استفاده از Middleware

bash
php artisan make:middleware GlobalViewData

در Middleware بنویس:

php
public function handle($request, Closure $next) { view()->share('site_year', now()->year); return $next($request); }

و در Kernel.php ثبتش کن داخل $middleware.


✅ روش ۳: استفاده از Service Container یا Facade

برای اطلاعاتی مثل تنظیمات سایت:

php
// در ServiceProvider یا کنترلر View::share('settings', config('site')); // یا به صورت Facade سفارشی View::share('settings', Setting::getAll());

✅ روش ۴: از Blade Components استفاده کن

کامپوننت‌ها می‌تونن داده‌هایی رو خودشون از مدل‌ها بگیرن و بدون نیاز به ارسال از کنترلر، به صورت خودکار داده رو آماده کنن.

blade
<x-footer />

داخل Footer.php (کامپوننت):

php
public function render() { return view('components.footer', [ 'settings' => Setting::first(), ]); }

✅ جمع‌بندی سریع

روشکاربردمناسب برای
View::share()ارسال داده سراسریمقادیر ثابت (مثل نام سایت)
View::composer('*', fn...)داده‌های داینامیکهمه ویوها
Middlewareتزریق داده در هر درخواستزمان یا تنظیمات ساده
Blade Componentsارسال داده داخلیبخش‌هایی مثل هدر و فوتر

اگه خواستی من برات یه فایل ServiceProvider آماده کنم با تنظیمات دلخواهت (مثلاً نام سایت، تنظیمات فوتر، دسته‌بندی‌ها)، فقط بگو چی توش باشه.

محتوای مرتبط

پست‌های مرتبط