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

السؤال

نشر

أرغب في وضع مجموعة من البيانات بحيث تتمكن جميع ال views ضمن المشروع الوصول إليها، وعند بحثي على الانترنت توصلّت إلى الكود التالي من الممكن أن يفيدني:

View::share('data', [1, 2, 3]);

ولكن كيف يمكنني استخدامه؟ وهل يوجد طريقة أخرى لمشاركة البيانات في لارافيل؟

Recommended Posts

  • 0
نشر

يوجد عدّة طرق لمشاركة البيانات بين views في لارافيل:

فيمكنك تنفيذ ذلك عن طريق استخدام متحكم رئيسي تضع فيه جميع البيانات أو العمليات العامة global التي ترغب بمشاركتها، ثم تستطيع الوصول إليها عن طريق باقي المتحكمات بالوراثة، كالتالي:

class BaseController extends Controller
{
  public function __construct()
  {
    /نضع البيانات التي نرغب بمشاركتها
    $user = User::all();

    // نقوم باستخدام share
    View::share('user', $user);
  }
}

الطريقة الثانية هي باستخدام الفلاتر Filter، فيقوم لارافيل بتنفيذ الفلتر قبل الطلب request عن طريق App:before:

App::before(function($request)
{
  
  View::share('user', User::all());
});

أو يمكنك كتابة الفلتر الخاص بك أيضاً:

Route::filter('user-filter', function() {
    View::share('user', User::all());
});

الطريقة الثالثة هي باستخدام وسيط middleware ووضعه في جميع المسارات التي ستتشارك البيانات كالتالي:

Route::group(['middleware' => 'SomeMiddleware'], function(){
  // نضع هنا المسارات ضمن مجموعة واحدة تتشارك البيانات 
});



class SomeMiddleware {
  public function handle($request)
  {
    \View::share('user', auth()->user());
  }
}

وأخيراً، يمكنك أيضاً استخدام viewComposer في لارافيل، فنقوم بإنشاء مجلّد خاص ضمن المسار App\Http\ViewComposers، ونضيف على serviceProvider:

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
    public function boot() {
        view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
    }
}

ثم نقوم بإضافة الصف TestViewComposer ضمن config/app.php:

namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;

class TestViewComposer {

    public function compose(View $view) {
        $view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
    }
}

وعندها يمكننا استدعاء البيانات بأي view كالتالي:

{{$ViewComposerTestVariable}}

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...