آموزش View ها در لاراول

آموزش View ها در لاراول

ویوها (view) در فریم ورک لاراول برای جداسازی قسمت کدهای html از کنترلرها آماده شده است view برای نگهداری و نمایش کدهای html استفاده می شود و در مسیر resources/views ذخیره می شوند

زمان مطالعه: 3 دقیقه
بازدید: 1090
پرسش و پاسخ: 0

ایجاد view در لاراول

مثال ذیل یک مثال ساده می باشد.

<!-- View stored in resources/views/greeting.blade.php -->

<html>
    <body>
        <h1>Hello, {{ $name }}</h1>
    </body>
</html>

بر فرض که این فایل پروژه شما می باشد پس در مسیر resources/views/greeting.blade.php قرار خواهد گرفت برای مشاهده و دسترسی به این view به صورت مستقیم از در فایل web.php مسیری به صورت ذیل تعریف می کنیم

Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
});

همانطور مشاهده می کنید View با عنوان greeting اولین آرگومان هستش و آرگومان دوم هم یک متغیر با مقدار James است که قراره در blade مورد نظر نمایش داده شود آرگومان دوم می تواند آرایه یا مجموعه از آرایه ها نیز باشد همانطور که می بینید این blade در پوشه views می باشد و ممکن است پروژه شما دارای پوشه های متعدد برای blade ها باشد پس برای پوشه های تو در تو می توانید از کاراکتر نقطه استفاده کنید و blade مورد نظر خود را نمایش دهید. مثلا برای Blade در این مسیر resources/views/admin/profile.blade.php باید به روش ذیل اقدام کنیم

return view('admin.profile', $data);

آموزش لاراول (laravel) پروژه محور ساخت فروشگاه اینترنتی به زبان ساده و تجربه محور یک راه مناسب برای یادگیری این فریم ورک است.

بررسی وجود داشتن یک view

برای اینکه مطمئن شوید یک view در مسیر مشخصی وجود دارد یا نه می توانید از فاساد view استفاده کنید در صورت وجود داشتن view مورد نظر true برگشت داده می شود

use Illuminate\Support\Facades\View;

if (View::exists('emails.customer')) {
    //
}

نمایش اولین view در مجموعه view های یک دایرکتوری

با استفاده از متد first اولین view از مجموعه ویوها که به صورت آرایه ای دریافت شده است برای شما نمایش داده خواهد شد. وقتی این متد برای شما نیاز مفید واقع می شود که view های شما در یک پکیج به این متد احتیاج داشته باشد که به نظرم خیلی مهم هم نیست! ولی از یک لحاظ که در برنامه معلوم شود شما قبلا از کدام view استفاده کردید و الان view جدید با چه عنوانی مشخص شده مفید خواهد بود.

return view()->first(['custom.admin', 'admin'], $data);

همچنین می توانید از فاساد view به روش ذیل استفاده کنید

use Illuminate\Support\Facades\View;

return View::first(['custom.admin', 'admin'], $data);

ارسال (پاس دادن) داده به view در فریم ورک لاراول

در فریم ورک لاراول می توانید به راحتی مجموعه از داده ها را به view ارسال کنید همانطور که در مثال های قبلی مشاهده کردید

return view('greetings', ['name' => 'Victoria']);

همانطور که مشاهده می کنید در روش انتقال دیتا به صورت آرایه ای شما باید کلید و مقدار را تعیین کنید و در view مقصد می توانید به key تعیین شده به مقدار خود دسترسی داشته باشید مثلا با دستور echo مقدار را چاپ کنید همچنین می توانید داده خود را با متد with به view مورد نظر پاس دهید.

return view('greeting')->with('name', 'Victoria');

اشتراک گذاری داده ها بین تمام view ها

برای اشتراک گذاری یک داده بین تمام view ها در لاراول می توانید از متد share موجود در فاساد view استفاده کنید این فراخوانی و استفاده باید در متد boot در فایل AppServiceProvider انجام شود. به مثال کامل اشتراک گذاری داده ها در تمام view توجه کنید

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::share('key', 'value');
    }
}

View Composers

View composer ها توابع callback یا متدهایی از کلاس هستند که در زمان به نمایش گذاشته شدن (render) view فراخوانی می شوند. فرض بگرید داده هایی دارید که می خواهید با هر بار نمایش view به آن bind شود. view composer ها با قرار دادن این منطق و سازماندهی آن در مکانی یکسان می تواند کمک شایانی در این زمینه به شما بکند.
حال می خواهیم view composer ها را در یک service provider ثبت و ایجاد کنیم. برای دسترسی به پیاده سازی زیرین کانترکت (contract)Illuminate\Contracts\View\Factory از تابع کمکی view استفاده می کنیم. لازم به ذکر است که لاراول یک پوشه ی پیش فرض برای نگهداریview composer ها در نظر نمی گیرد، از این رو در سازمان دهی آن ها کاملا آزادید. به عنوان مثال می توانید یک پوشه به این نامApp\Http\ViewComposers ایجاد کرده و view composer ها را در آن ذخیره نمایید:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ViewServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // Using class based composers...
        View::composer(
            'profile', 'App\Http\View\Composers\ProfileComposer'
        );

        // Using Closure based composers...
        View::composer('dashboard', function ($view) {
            //
        });
    }
}

به خاطر داشته باشید که اگر یک service provider جدید برای دربرگرفتن و نگهداری تعریف و ثبت composer ها را ایجاد کنید، در آن صورت بایستی حتما service provider مورد نظر را به آرایه ی providers در فایل پیکربندی (config) config/app.php اضافه نمایید. پس از تعریف و ثبت composer، خواهید دید که هر بار ویو profile نمایش داده می شود همزمان با آن متد ProfileComposer@composeنیز صدا زده می شود. اکنون می بایست کلاس composer را ایجاد کنیم:

<?php

namespace App\Http\View\Composers;

use App\Repositories\UserRepository;
use Illuminate\View\View;

class ProfileComposer
{
    /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * Create a new profile composer.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        // Dependencies automatically resolved by service container...
        $this->users = $users;
    }

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('count', $this->users->count());
    }
}

درست قبل از اینکه view نمایش داده شود، متد compose متعلق به composer همراه با نمونه ی Illuminate\Contracts\View\Viewفراخوانی می گردد. سپس داده ها به وسیله ی متد with به view متصل (bind) می شوند.
توجه: تمامی composer ها توسط service container تشخیص داده و شناسایی می شوند، از این رو می توانید dependency های مورد نیاز را داخل متد سازنده (constructor) composer اعلان نوع (type-hint) نمایید.

الصاق یک composer به چندین view

می توانید چندین view را به صورت آرایه ای به کامپوزر خود پاس دهید اولین آرگومان composer آرایه شما را خواهد گرفت

View::composer(
    ['profile', 'dashboard'],
    'App\Http\View\Composers\MyViewComposer'
);

برای الصاق (الحاق) یک composer به تمام view ها می توانید از کاراکتر * استفاده کنید به مثال ذیل توجه کنید

View::composer('*', function ($view) {
    //
});

View Creator ها در لاراول

view creator ها در لاراول خیلی شبیه به view composer ها هستند با این تفاوت که با ایجاد شدن یک نمونه از view بلافاصله اجرا می شوند و منتظر نمی مانند view برای نمایش داده شدن آماده شود. برای ایجاد یک view creator ، از متد creator به صورت ذیل استفاده کنید:

View::creator('profile', 'App\Http\View\Creators\ProfileCreator');

مطالعه بیشتر: framework چیست؟ 

بهزاد میرزازاده
مسیر درست با پرسش های درست ساخته می شود

مشاهده تمام مطالب نویسنده