Laravel 5 - глобальная переменная вида Блейда, доступная во всех шаблонах

Ответы - Laravel 5 - глобальная переменная вида Блейда, доступная во всех шаблонах / Laravel 5 - global Blade view variable available in all templates

18.04.2015 01:43:22
Вы можете сделать это с помощью view composers . Композиторы представлений выполняются при загрузке шаблона. Вы можете передать закрытие с дополнительной функциональностью для этого представления. С помощью view composers вы можете использовать подстановочные знаки. Чтобы сделать вид композитор для каждого вида просто использовать *
.
View::composer('*', function($view)
{
$view->with('variable','Test value');
});
Вы также можете сделать это без закрытия, как вы можете видеть в документах.
View::composer('*', 'App\Http\ViewComposers\ProfileComposer');
Профиль класса композитор должен сочинять способ.
Композиторы представлений выполняются при визуализации представления. Laravel также имеет вид создателей. Они выполняются при создании экземпляра представления.
Вы можете также выбрать, чтобы использовать BaseController
с setupLayout способ. Затем каждое представление, которое вы будете загружать, загружается через метод setupLayout, который добавляет некоторые дополнительные данные. Однако, используя view composers, вы почти уверены, что код выполнен. Но с подходом BaseController у вас больше гибкости, потому что вы можете пропустить загрузку дополнительных данных.
Редактировать: как отметил Ник Гутьеррес можно также использовать представление акцию.

view()->share
заключается в том, что это выполняется только при использовании представления, но с view()->share
он выполняется независимо от того, что-вы можете возвращать некоторый JSON в вызове API, например, который не использует представление.

18.04.2015 01:44:47
Создайте нового поставщика услуг, как предлагается здесь
Добавьте нового поставщика услуг в файл конфигурации (config / app.РНР.)
В методе загрузки вашего нового поставщика услуг используйте:
View::share( 'something_cool', 'this is a cool shared variable' );
Теперь вы готовы использовать $something_cool во всех ваших взглядов.
Надеюсь, это поможет.

artisan down
. Ввод строки версии приложения в качестве параметра Cache buster или ее отображение в нижнем колонтитуле во время обновления является рутиной с другими решениями. (использование переменной env для этого, вероятно, было бы самым чистым решением, хотя)




18.04.2015 01:46:09
Вариант 1:
Вы можете использовать view::share()
вот так:
<?php namespace App\Http\Controllers;
use View;
//You can create a BaseController:
class BaseController extends Controller {
public $variable1 = "I am Data";
public function __construct() {
$variable2 = "I am Data 2";
View::share ( 'variable1', $this->variable1 );
View::share ( 'variable2', $variable2 );
View::share ( 'variable3', 'I am Data 3' );
View::share ( 'variable4', ['name'=>'Franky','address'=>'Mars'] );
}
}
class HomeController extends BaseController {
//if you have a constructor in other controllers you need call constructor of parent controller (i.e. BaseController) like so:
public function __construct(){
parent::__construct();
}
public function Index(){
//All variable will be available in views
return view('home');
}
}
Вариант 2: Использование композитора:
- Создайте файл composer в
app\Composers\HomeComposer.php
NB: создайте app\Composers
, если оно не существует
<?php namespace App\Composers;
class HomeComposer
{
public function compose($view)
{
//Add your variables
$view->with('variable1', 'I am Data')
->with('variable2', 'I am Data 2');
}
}
Затем вы можете прикрепить композитор к любому представлению, сделав это
<?php namespace App\Http\Controllers;
use View;
class HomeController extends Controller{
public function __construct(){
View::composers([
'App\Composers\HomeComposer' => ['home'] //attaches HomeComposer to home.blade.php
]);
}
public function Index(){
return view('home');
}
}
Вариант 3: Добавить композитора к поставщику услуг, в Laravel 5 я предпочитаю иметь мой композитор в App\Providers\ViewServiceProvider
Создайте файл composer в
app\Composers\HomeComposer.php
Добавить HomeComposer в приложение \ Providers\ViewServiceProvider
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use View;
use App\Composers\HomeComposer;
use Illuminate\Support\Facades\Blade;
class ViewServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//add to all views
view()->composer('*', HomeComposer::class);
//add to only home view
//view()->composer('home', HomeComposer::class);
}
}

$user = Auth::user();
и передать переменную $user всем шаблонам Блейда, включая заголовок и часть содержимого? Я попробовал это, поместив переменную $user в BaseController, а затем поделившись ею, но если я var_dump $user, я получаю кучу защищенных значений в массиве. В основном я хочу иметь доступ ко всем пользовательским переменным auth во всем приложении во всех шаблонах и представлениях. Кажется простым, но потратили часы, пытаясь понять это.


{{ $user['name'] }}
в то время как это работает для объекта {{ $user->name }}

Class 'App\Http\Controllers\View' not found



View::composer('*', function($view) { $view->with('current_user', Auth::user()); }
вместо доли.

10.10.2016 04:34:14
Кроме того, вы можете сделать это в Route.php
-файл:
view()->share('variableName', $variable);

25.02.2019 02:28:39
Вы можете добавить в Controller.php
-файл:
use App\Category;
И затем:
class Controller extends BaseController {
public function __construct() {
$categories = Category::All();
\View::share('categories', $categories);
}
}

13.03.2019 01:02:51
и вы можете дать массив не только View::share('key', 'value');
можно поставить такие, как View::share(['key'=>'value','key'=>'value'])

18.07.2019 04:16:50
Я бы предпочел использовать промежуточное ПО с view()
php artisan make:middleware GlobalTimeConfig
данные, которые вы хотите поделиться
share()
Регистрация вновь созданного промежуточного программного обеспечения
Добавьте промежуточное программное обеспечение в группу маршрутов промежуточного программного обеспечения, как показано в примере ниже
/приложение/и HTTP/ядра.РНР
<?php
namespace App\Http\Middleware;
use Closure;
class GlobalTimeConfig
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$time_settings = [
'company_timezone' => 'UTC',
'company_date_format' => 'Y-m-d H:i:s',
'display_time' => true,
];
view()->share('time_settings', $time_settings);
return $next($request);
}
}
Доступ к данным из шаблонов
Доступ к данным из любого шаблона с заданным ключом в вызове метода View:: share()
напр..:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\GlobalTimeConfig::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
Править: Ответ поставщика услуг Nic Gutierrez может быть лучшим (или лучшим) решением.