آموزش لاراول 7: آموزش Views در لاراول

ایجاد Views

در این بخش از آموزش لاراول، میخواهیم به مفاهیم view بپردازیم. view ها شامل HTML ارائه شده توسط برنامه شما هستند و لاجیک controller / application شما را از لاجیک presentation جدا می کنند. view ها در دایرکتوری resources/views ذخیره می شوند. یک view ساده ممکن است چیزی شبیه به این باشد:

‌<‌!-- View stored in resources/views/greeting.blade.php --‌>‌
    
    ‌<‌html‌>‌
        ‌<‌body‌>‌
            ‌<‌h1‌>‌Hello, {{ $name }}‌<‌/h1‌>‌
        ‌<‌/body‌>‌
    ‌<‌/html‌>‌

از آنجا که این view در resources/views/greeting.blade.php ذخیره شده است ، میتوانیم با استفاده از global view helper آنرا برگردانیم:

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

همانطور که مشاهده می کنید ، اولین آرگومان ارسال شده به view helper مربوط به نام فایل view در دایرکتوری resources/views است. آرگومان دوم آرایه ای از داده است که باید در دسترس view قرار گیرد. در این حالت ، ما در حال ارسال متغیر name هستیم که با استفاده از Blade syntax در view نمایش داده می شود.

همچنین ممکن است view ها در زیر شاخه های دایرکتوری resources/views قرار بگیرند. علامت "نقطه" ممکن است برای مرجع viewهای تو در تو استفاده شود. به عنوان مثال ، اگر view شما در resources/views/admin/profile.blade.php ذخیره شده باشد ، می توانید به این ترتیب به آن مراجعه کنید:

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

نام دایرکتوری ها نباید حاوی کارکتر باشد.

تعیین موجود بودن یک View

اگر نیاز به تعیین وجود یک view دارید ، می توانید از View facade استفاده کنید. اگر view موجود باشد ، متد exists مقدار true برمی گرداند:

use Illuminate\Support\Facades\View;
    
    if (View::exists('emails.customer')) {
        //
    }

ایجاد اولین view موجود

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

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

شما می توانید متد را از طریق View facade فراخوانی کنید:

use Illuminate\Support\Facades\View;
    
    return View::first(['custom.admin', 'admin'], $data);

ارسال Data به View ها

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

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

هنگام ارسال اطلاعات با این روش ، داده ها باید یک آرایه با جفت key / value باشند. داخل view ، سپس می توانید با استفاده از کلید مربوطه به هر مقدار مانند‌ ‌<‌? ;php echo $key ?‌>‌ دسترسی پیدا کنید. به عنوان جایگزینی برای ارسال آرایه کاملی از داده ها به تابع view helper ، می توانید از متد with برای افزودن داده های جداگانه به view استفاده کنید:

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

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

گاهی اوقات ، ممکن است لازم باشد که داده ای را با تمام viewهایی که توسط برنامه شما ارائه می شود ، به اشتراک بگذارید. این کار را می توانید با استفاده از متد share مربوط به view facade انجام دهید. به طور معمول ، شما باید فراخوانی share را در متد boot یک service provider برقرار کنید. شما می توانید آنها را به AppServiceProvider اضافه کنید یا یک service provider جداگانه برای استقرار آنها ایجاد کنید:

‌<‌?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 یا متدهای class هستند که هنگام اجرای یک view فراخوانی می شوند. اگر داده هایی دارید که می خواهید مقید به view باشند با هر بار اجرای view ، یک view composer می تواند به شما کمک کند logic را در یک مکان واحد سازماندهی کنید.

برای این مثال ، بیایید view composer ها را در یک service provider رجیسترکنیم. برای دسترسی به Illuminate\Contracts\View\Factory از View facade استفاده خواهیم کرد. بخاطر داشته باشید ، لاراول برای view composer ها دایرکتوری پیش فرض ندارد. شما می توانید هر طور که بخواهید آنها را سازماندهی کنید. به عنوان مثال ، می توانید یک دایرکتوری app/Http/View/Composers ایجاد کنید:

‌<‌?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 جدید برای رجیستر view composer خود ایجاد کنید ، باید service provider را به آرایه providers در فایل پیکربندی config/app.php اضافه کنید.

اکنون که composer را رجیسترکرده ایم ، هر بار که profile view اجرا می شود ، متد[email protected] نیز اجرا می شود.بیایید composer class را تعریف کنیم:

‌<‌?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 با Illuminate\View\View instance فراخوانی می شود. شما می توانید از متد with برای اتصال داده ها به view استفاده کنید.

پیوستن Composer به چندین View

با ارسال آرایه ای از viewها به عنوان اولین آرگومان با متد composer ، می توانید یک view composer را به طور همزمان به چند view متصل کنید:

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

متد composer همچنین کارکتر * را به عنوان یک wildcard قبول می کند ، به شما این امکان را می دهد که composer را به همه view ها اتچ کنید:

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

View Creators

View creators بسیار شبیه بهview composer هستند. برای رجیستر یک view creator، از متد creator استفاده کنید:

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

بهینه سازی Views

به طور پیش فرض ، viewها بر اساس درخواست کامپایل می شوند. هنگامی که درخواستی اجرا می شود که view را render کند ، لاراول تعیین می کند که آیا نسخه کامپایل شده view وجود دارد یا خیر. اگر فایل وجود داشته باشد ، لاراول سپس تعیین می کند که آیا view کامپایل نشده اخیراً از view کامپایل شده modify شده است یا خیر. اگر view کامپایل شده وجود نداشته باشد یا view غیر کامپایل شده modify شده باشد ، لاراول دوباره view را کامپایل می کند.

کامپایل viewها در طول درخواست روی performance تأثیر منفی می گذارد ، بنابراین لاراول امکان استفاده از دستور view:cache Artisan برایprecompile تمام viewهای استفاده شده توسط برنامه شما را فراهم می کند. برای افزایش عملکرد ، می توانید این دستور را به عنوان بخشی از روند deployment خود اجرا کنید:

php artisan view:cache

برای پاک کردن view cache می توانید از دستور view:clear استفاده کنید:

php artisan view:clear

امیدواریم این بخش از مقالات آموزشی مربوط به آموزش لاراول و php برای شما مفید واقع شده باشد.

× در حال پاسخ به: