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

مشاركة بيانات مع layout في laravel

Mahmoud Alrashidi

السؤال

بما أن صفحة العرض app.blade تستخدمها مجموعة من صفحات العرض الأخرى، هل هناك طريقة لمُشاركة بعض البيانات مع هذه الصفحة حتى لا نضطر لتمريرها في كل مرة إلى صفحة العرض المطلوبة. 

لدي مجموعة من الأقسام في قاعدة البيانات و في جميع الصفحات يتم عرض هذه الأقسام

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

يُمكنك عمل ذلك من خلال AppServiceProvider من خلال التابع boot:

<?php



public function boot()
{
  view()->share('categories', Category::all());
}

مع تضمين الكلاس Category في بداية الملف:

<?php

use App\Models\Category; // إستدعاء الكلاس يكون على حسب مجال الأسماء الخاص به

و بهذا الشكل يُمكنك إستخدام المُتغير categories في أي صفحة عرض تريدها. لانه قد تمت مشاركته مع جميع الviews.

لكن إذا أردت مُشاركة المُتغير categories مع صفحة عرض مُعينة مثلاً و ليس كل صفحات العرض يُمكنك ذلك من خلال AppServiceProvider من خلال التابع boot:

<?php

use App\Models\Category;

public function boot()
{
  //view()->share('categories', Category::all());
  view()->composer('layouts.app', function($view) {
    $view->with('categories', Category::all());
  });
}

بهذه الطريقة أصبح المُتغير categories مُتاحا لصفحة العرض app.blade.php يُمكنك إستخدامه فيها لكن بعكس الطريقة الأولى لن تتمكن من إستخدامه في صفحات عرض أخرى لأنه متاح لهذه الصفحة فقط، اقصد لو استخدمنا المتغير لعرض الأقسام في صفحة app.blade.php ستعرض الأقسام في بقية الصفحات الأخرى التي تعتمد على هذه الصفحة كقالب، لكن لن تتمكن الصفحات الأخرى من إستخدام المُتغير بطريقة أو بأخرى لأنه لن يكون متاحاً لها فهو متاح للإستخدام فقط في الصفحة app.blade.php،

ماذا لو أردت إتاحة هذا المُتغير لمجموعة من صفحات العرض (views) تستخدمه كيفما شاءت!!؟ يُمكنك ذلك كما يلي:

<?php

use App\Models\Category;

public function boot()
{
  //view()->share('categories', Category::all());
  view()->composer(['layouts.app', 'posts.create'], function($view) {
    $view->with('categories', Category::all());
  });
}

في هذا المثال مررنا المتغير categories لكل من صفحة العرض app.blade.php الموجودة في مجلد layouts و ايضاً صفحة العرض create.blade.php الموجدة في مجلد posts سيكون المُتغير متاح لكليهما، و بهذه الطريقة يُمكنك تمرير المتغير لأي صفحة أخرى تريد.

يمكنك الإطلاع على توثيق موسوعة حسوب الخاص بهذا الموضوع: مشاركة البيانات و مؤلّفو الواجهات

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...