17 0
View Composer Laravel orchiddev.ir

نمایش داده ها با استفاده از View Composer در لاراول

در لاراول قابلیت جالبی به نام View Composer وجود دارد که عملکرد آن نمایش داده ها در بخش های از صفحات View است که نیازی نیست که مستقیم از کنترلر داده ها را از مدل بگیریم و به View ارسال کنیم که البته این مورد برای صفحاتی که کم باشد جواب می دهد.

اما وقتی صفحات آن بیشتر می شود و نیاز دارید در آن از صفحه داده ای نمایش بدهید که به مشکل اساسی بر می خورید و خطاهایی دریافت می کنید. این خطا ها نشان از این است که View مورد نظر برای شناسایی آن صفحه تعریف نشده است که بتواند داده ای در آن نمایش داده شود.

به ترتیب زیر پیش بروید.

با استفاده از Service Provider فایلی به نام ViewServiceProvider ایجاد می کنیم.

1. دستور زیر:
php artisan make:provider ViewServiceProvider 
2. به مسیر config/app بروید و مسیر ViewServiceProvider در قسمت providers در انتهای آن را فراخوانی کنید:
Illuminate\View\ViewServiceProvider::class,
3. در مسیر app/Http پوشه ای به نام View و زیر مجموعه پوشه به نام Composers ایجاد کنید و فایلی به نام PostComposer.php ایجاد کنید و کد زیر را وارد کنید:
<?php

namespace App\Http\View\Composers;

use App\Models\Post;
use Illuminate\View\View;

class PostComposer
{
    public function __construct()
    {
        $this->posts = Post::orderBy('id', 'desc')->get();
    }

    public function compose(View $view)
    {
        $view->with('posts', $this->posts);
    }
}
4. بر می گردیم به فایل ViewServiceProvider در قسمت تابع بوت View مورد نظر را فراخوانی کنید:
use App\Http\View\Composers\PostComposer;

public function boot(): void
{
   View::composer('home.sidebar.sidebar', PostComposer::class);
}

عملکرد کد بالا اینکه در جایی که می خواهید که داده مثلا در سایدبار یا ابزارک نمایش دهید و داده رو از PostComposer::class که در آن مدل Post تعریف شده را دریافت و در صفحه home.sidebar.sidebar نمایش می دهد.

حالا با تعریف حلقه foreach داده ها را نمایش می دهیم.
<ul class="list-group">
    @foreach($posts as $post)
         <li class="list-group-item">{{$post->title}}</li>
    @endforeach
</ul>

موفق باشید 🙂

لاراول (Laravel) آوریل / 12 / 2023 61

دیدگاه شما


طراحی و کد نویسی شده توسط توسعه دهنده ارکید