Передача параметров во все вьюшки в Laravel

Ромчик
0

laravelДоброго времени суток. В данной статье мы рассмотрим, как в Laravel передать значение во все вьюшки. Например, у нас есть таблица с настройками нашего сайта settings. И в этой таблице хранится название нашего сайта site_name. Наша задача состоит в том, чтобы передать значение site_name во все вьюшки нашего сайта.

И так у меня установлен Laravel 5.5.3

Версия Laravel

Создание миграции в Laravel.

Давайте сгенерируем миграцию CreateSettingsTable, которая будет создавать таблицу settings.

Для этого в консоли вводим следующую команду:


    php artisan make:migration CreateSettingsTable --create=settings

Создание миграции в Laravel. Используем команду artisan

Теперь откроем  данную миграцию и в метод up добавим следующий код:


Schema::create('settings', function (Blueprint $table) {

    $table->increments('id');

    $table->string('key',100);

    $table->text('value');

    $table->timestamps();

});

Запустим миграцию:


    php artisan migrate

Запускаем миграцию в Laravel.

Будут созданы три таблицы: users, password_resets (эти таблицы нас не интересуют) и наша таблица settings с полями id, key, value, crated_at, updated_at.

Создание модели и контроллера в Laravel

Теперь давайте создадим модель Setting для работы с таблице settings. Для этого выполним команду в консоли:


    php artisan make:model Setting -c

Обратите внимание на параметр –c – это означает, что будет создан и контроллер SettingController.

Создание модели и контроллера одной командой artisan

Модель можно не трогать, а вот в котроллер SettingController добавим несколько методов:


public function index1()

{

    return view('index1');

}



public function index2()

{

    return view('index2');

}



public function index3()

{

    return view('index3');

}

Мы добавили три метода index1, index2 и index3. Каждый из этих методов вызывает соответствующую  вьюшку. Давайте создадим три вьюшки: index1.blade.php, index2.blade.php и index3.blade.php. И во вьюшку index1 поместим простой текст index1, во вьюшку index2 – текст index2 и в index3 – index3.

Создание маршрутов

Теперь давайте создадим три маршрута. Открываем файл routers/web.php и добавляем в конец следующий код:


    Route::get('/index1','SettingController@index1');

    Route::get('/index2','SettingController@index2');

    Route::get('/index3','SettingController@index3');

Давайте проверим,  перейдем по ссылке <домен>/index1 должна открыться страница с index1. Отлично.

Передача параметра всем вьюшкам

Давайте добавим в нашу таблицу settings добавим строку: key = site_name, а value = TEST.

Добавление данных в таблицу, используя phpmyadmin

Создадим сервис провайдер ViewServiceProvider. Для этого в консоли выполним следующую команду:


    php artisan make:provider ViewServiceProvider

Создание сервис провайдера в Laravel

Откроем наш только, что созданный сервис провайдер и добавим в него следующий код:


<?php

namespace App\Providers;


use Illuminate\Support\ServiceProvider;

use App\Setting;


class ViewServiceProvider extends ServiceProvider

{

    /**
    * Bootstrap the application services.
    *
    * @return void
    */
    public function boot()
    {
        view()->share('site_name', Setting::where('key','site_name')->first()->value );
    }

    /**
    * Register the application services.
    *
    * @return void
    */
    public function register()
    {
       //
    }
}

Теперь давайте подключим наш сервис провайдер. Для этого в файл config/app.php в ‘providers’ добавим:


'providers' => [

    /*
    * Laravel Framework Service Providers...
    */
    …
    App\Providers\ViewServiceProvider::class
    …

Ну все. Теперь в представлениях мы можем использовать:


    {{  $site_name  }}

Давайте изменим наши вьюшки и перед текстом добавим {{ $site_name }}.

Проверяем, переходим <домен>/index1

Проверяем вывод добавленого параметра

Отлично. Все работает.

Заключение.

Мы с вами создали миграцию. Затем запустили ее. Тем самым создали таблицу settings. Дальше с помощью одной команды artisan мы создали модель и контроллер.  В контроллер добавили несколько методов. Потом мы создали сервис провайдер, в метод boot, которого добавили:


    view()->share('site_name', Setting::where('key','site_name')->first()->value );

Тем самым передали во все вьюшки переменную site_name, в которую поместили значение из нашей таблицы.

Но бывают ситуации, когда нужно параметр передать в одну вьюшку, тогда в метод boot помещаем следующий код:


view()->composer ('index1', function ($view)

{

    $view->with('site_name', 'Ваше имя');

});

В этом случае во вьюшку index1.blade.php будет передана переменная site_name, значение которой равно ‘Ваше имя’.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger

©2012-2020 По всем вопросам обращайтесь через форму обратной связиПолитика конфиденциальности

Яндекс.Метрика