اذهب إلى المحتوى

السؤال

نشر (معدل)

أريد تعيين متغير في الجلسة Session في لارافيل Laravel وقمت بكتابة السطر التالي:

session(['lang' => 'en']);

لكن المشكلة هنا هي أنني لا أعرف مكان وضع هذا الكود، لأنني أرغب في تعيينه لمرة واحدة (عندما يزور المستخدم أي صفحة في الموقع) ويتم إستخدامه في أي جزء من الكود؟ كيف أقوم بهذا الأمر؟

تم التعديل في بواسطة Emad Saif

Recommended Posts

  • 1
نشر

يمكنك توظيف فكرة الطبقات الوسيطة Middlewares لهذا الغرض. فقبل استهداف اي متحكم يتم التحقق من ما ان كانت الجلسة تحتوي على متغير باسم lang او لا، في حالة عدم وجوده يتم تعيينه بشكل افتراضي.

نقوم أولا بإنشاء الطبقة الوسيطة الخاصة بنا عن طريق تشغيل الأمر: 

php artisan make:middleware LanguageMiddleware

يقوم هذا بإنشاء ملف جديد داخل مجلد http\middlewares ، قم بفتح الملف وقم بتعديل الشيفرة بحسب حاجتك.

use Session;

..


public function handle($request, Closure $next)
    {
        if (! Session::has('lang')) { // ان لم تحتوي الجلسة على متغير للغة
            Session::put('lang' ,'ar'); // نقوم بتعيين المتغير باسناد قيمة افتراضية له
        }
 
        return $next($request);
    }

لا يزال علينا تعريف هاته الطبقة الوسيطة في ملف app/Http/Kernel.php في مصفوفة middleware ليتم تطبيقه على أية مسارات. ويكون ذلك كـ: 

protected $middleware = [
   \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
   \App\Http\Middleware\EncryptCookies::class,
   \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
   \Illuminate\Session\Middleware\StartSession::class,
   \Illuminate\View\Middleware\ShareErrorsFromSession::class,
   \App\Http\Middleware\VerifyCsrfToken::class,


   // 
   \App\Http\Middleware\LanguageMiddleware::class
];

الآن سيتم استهداف شيفرة التحقق السابقة كل مرة يتم فيها طلب مسار ويب.

ان كنت تنوي تغيير لغة التطبيق عن طريق تغيير القيمة المخزنة ك lang في الجلسة فيمكنك ضبط الشيفرة بما يلائم هذا: 

use Session;
use App;

..


public function handle($request, Closure $next)
    {
        if (! Session::has('lang')) { // ان لم تحتوي الجلسة على متغير للغة
            Session::put('lang' ,'ar'); // نقوم بتعيين المتغير باسناد قيمة افتراضية له
            App::setLocale('ar'); // قم بضبط لغة التطبيق وفق اللغة الافتراضية التي تريدها
        }
        else{
            App::setLocale(Session::get('lang')); // في حالة توفر الجلسة على متغير يخص اللغة قم بضبط لغة التطبيق وفقه
        }
 
        return $next($request);
    }

تعرف أكثر عن البرمجيّات الوسيطة (Middleware) في Laravel.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...