Как использовать переменную во всех представлениях?

Я хочу, чтобы информация о языковой системе системы была доступна во всех представлениях, поэтому я мог бы выделить любой язык, выбранный пользователем в данный момент. После некоторых поисковых запросов я нашел проблему совместного использования стоимости, рассмотренную в официальной документации . Однако, после ввода кода в boot() выполните следующие действия:

 class AppServiceProvider extends ServiceProvider{ public function boot(){ view()->share('locale', \Lang::getLocale()); } } 

переменная $locale , при доступе в представлениях, всегда содержит языковой стандарт по умолчанию , а не текущий выбранный. Зачем?

Related of "Как использовать переменную во всех представлениях?"

Я обычно использую View Composers, чтобы он стал более понятным и понятным.

Например, если я хочу поделиться переменной с главной навигационной панелью ко всем моим представлениям, я следую приведенным ниже правилам:

1. Создайте нового поставщика услуг

Вы можете создать поставщика услуг с помощью artisan cli:

php artisan make:provider ViewComposerServiceProvider

В файле ViewComposerServiceProvider создайте метод composeNavigation, в котором есть основное меню blade-шаблона main.nav , представляющее навигационное меню с общими переменными.

ViewComposerServiceProvider выглядит так:

 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class ViewComposerServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { $this->composeNavigation(); } /** * Register the application services. * * @return void */ public function register() { // } private function composeNavigation() { view()->composer('main.nav-menu', 'App\Http\ViewComposers\NavComposer'); } } 

2. Создать композитор

Как вы видели в приведенном выше файле, мы имеем App \ Http \ ViewComposers \ NavComposer.php, поэтому давайте создадим этот файл. Создайте папку ViewComposers в App \ Http, а затем создайте файл NavComposer.php .

Файл NavComposer.php :

 <?php namespace App\Http\ViewComposers; use App\Repositories\NavMenuRepository; use Illuminate\View\View; class NavComposer { protected $menu; public function __construct(NavMenuRepository $menu) { $this->menu = $menu; } public function compose(View $view) { $thing= $this->menu->thing(); $somethingElse = $this->menu->somethingElseForMyDatabase(); $view->with(compact('thing', 'somethingElse')); } } 

3. Создать репозиторий

Как вы видели выше в файле NavComposer.php, у нас есть репозиторий. Обычно я создаю репозиторий в каталоге приложения , поэтому создаю каталог репозиториев в приложении, а затем создаем файл NavMenuRepository.php .

Этот файл является сердцем этого шаблона проектирования. В этом файле мы должны принять значение наших переменных, которые хотим разделить со всеми нашими представлениями.

Взгляните на файл ниже:

 <?php namespace App\Repositories; use App\Thing; use DB; class NavMenuRepository { public function thing() { $getVarForShareWithAllViews = Thing::where('name','something')->firstOrFail(); return $getVarForShareWithAllViews; } public function somethingElseForMyDatabase() { $getSomethingToMyViews = DB::table('table')->select('name', 'something')->get(); return $getSomethingToMyViews; } } 

Для людей с небольшим проектом:

Во-первых, принятый ответ потрясающий!

Для пользователей Laravel 5.2:

Просто используйте новую директиву blade @inject в своих представлениях, как это

@inject('shared','App\Utilities\SharedWithView')

то вы можете использовать его: {{ $shared->functionName() }}

И SharedWithView – это простой класс, подобный этому:

 namespace App\Utilities; use App\Repositories\SomeRepositoryLikeArticlesRepository; class SharedWithView { public function functionName() { $properNameHere = new SomeRepositoryLikeArticlesRepository(); return $properNameHere->forEaxmpleGetMostViewedArticles( 10 ); } }