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

كيف أشارك البيانات بين Views في لارافيل

Amir Alsaeed

السؤال

أرغب في وضع مجموعة من البيانات بحيث تتمكن جميع ال 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}}

 

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

  • 0

في ملف AppServiceProvider.php في مسار app\Providers يمكنك وضع التالي

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

في دالة boot بحيث تصبح 

public function boot()
{
    View::share('data', [1, 2, 3]);
}

الآن ستتم مشاركة هذه القيمة عبر جميع views ويمكنك الوصول إليها

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...