Как я могу в Laravel 5 сделать глобальную переменную, которая будет доступна во всех шаблонах Blade?Laravel 5 - глобальная переменная вида Blade доступна во всех шаблонах
ответ
Вариант 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: Использование композитор:
- Создайте файл композитора в
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');
}
}
Ваш ответ действительно помог мне с вариантом 1, хотя, если вы пытаетесь получить доступ к '$ user = Auth :: user();' и передаете переменную $ user ко всем шаблонам blade-серверов, включая заголовок и часть содержимого ? Я попробовал это, поместив переменную $ user в BaseController и затем разделив ее, но если я var_dump $ user, я получаю кучу защищенных значений в массиве. В основном я хочу иметь доступ ко всем пользовательским переменным пользователя во всем приложении во всех шаблонах и представлениях. Кажется простым, но потратили часы, пытаясь понять это. –
На самом деле это сработало: ' = $ User ['name']; ?> ', но это не сработало:' {{$ user-> name}} ' –
@Chad Priddle Это должно работать для массива' {{$ user ['name']}} ', пока это работает для объекта '{{$ user-> name}}' – Digitlimit
Вы можете сделать это с помощью view composers. Просмотр композиторов выполняется при загрузке шаблона. Вы можете перейти в Closure с дополнительной функциональностью для этого вида. С композиторами просмотра вы можете использовать подстановочные знаки. Чтобы сделать композитор просмотра для каждого вида, просто используйте *
.
View::composer('*', function($view)
{
$view->with('variable','Test value');
});
Вы также можете сделать это без закрытия, как вы можете видеть в документах.
View::composer('*', 'App\Http\ViewComposers\ProfileComposer');
Профайл композитора должен иметь метод компоновки.
Просмотр композиторов выполняется при визуализации представления. Ларавель также видит создателей. Они выполняются при создании экземпляра представления.
Вы также можете использовать BaseController
с методом setupLayout. Затем каждый вид, который вы загружаете, загружается через метод setupLayout, который добавляет некоторые дополнительные данные. Однако, используя композиторы просмотра, вы уверены, что код выполнен. Но с помощью подхода BaseController у вас больше гибкости, потому что вы можете пропустить загрузку дополнительных данных.
EDIT: Как упоминалось Ником Гутьерресом, вы также можете использовать общий доступ к просмотру.
Разница между этим и 'вид() -> share' заключается в том, что это выполняется только при использовании представления, но с 'view() -> share' он запускается независимо от того, что вы могли бы возвращать некоторый JSON в вызове API, например, который не использует представление , – Petecoop
Create a new Service Provider as suggested in here
Добавить новый Service Provider в файл конфигурации (конфигурации/app.php).
В способе загрузки вашего нового использования поставщика услуг:
View::share('something_cool', 'this is a cool shared variable');
Теперь вы готовы использовать $ something_cool во всех ваших взглядов.
Надеюсь, это поможет.
plus, это окончательное решение для ** переменных, используемых в нескольких случаях на странице 503 после 'artisan down'. ** Ввод строки версии приложения в качестве параметра кэширования шины или ее отображение в нижнем колонтитуле, в то время как обновление - это работа с другими решениями , (используя переменную env для этого, вероятно, было бы самым чистым решением, хотя) – luchaos
это лучшее решение, чем утвержденный ответ – Christophvh
Я думаю, что основное отличие заключается в том, что пользователь спрашивает, как иметь * глобальную переменную, доступную во всех шаблонах , С принятым решением пользователь должен помнить о расширении BaseController и вызове parent :: construct, а с решением ViewComposer ему нужно вызвать View :: composers в каждом методе построения контроллера, чтобы сделать переменные доступными. –
вы можете прошить его в сессии, вы можете определите его в.env file (static vars)
Ищет решение этой проблемы и нашли лучшее решение в документации Laravel. Просто используйте View::share
в AppServiceProvider
, как это:
View::share('key', 'value');
Подробности here.
Кроме того, вы можете сделать это в файле Route.php
:
view()->share('variableName', $variable);
- 1. Глобальная переменная blade-сервера Laravel
- 2. Laravel 5 Blade Mystery
- 3. Глобальная переменная в контроллере laravel
- 4. Laravel: глобальная переменная запроса?
- 5. Laravel Blade @yield переменная область
- 6. Rails 3 - переменная доступна во всех контроллерах
- 7. Глобальная переменная в app.js доступна в маршрутах?
- 8. laravel blade - переменная не определена
- 9. Laravel 4 Blade @include переменная
- 10. Глобальная переменная доступна только для первой функции?
- 11. Глобальная переменная жидкости доступна в пользовательских фильтрах
- 12. Laravel Blade View - Неопределенная переменная: ошибки
- 13. Laravel - Есть ли глобальная переменная?
- 14. Глобальная переменная в laravel 4
- 15. Laravel 5 Upgrade - Синтаксис формы Blade
- 16. Laravel 5 Blade - где состояние в счете
- 17. Глобальная переменная во время рекурсии
- 18. Переменная доступна во всех методах контроллера? Codeigniter 3
- 19. MVC 5 глобальная переменная на пользователя
- 20. Laravel 5: Global Auth переменного $ пользователя во всех контроллерах
- 21. Ссылка на CSS/JS в шаблонах Blade Laravel
- 22. Угловая 2 - глобальная переменная для всех компонентов
- 23. Глобальная переменная во всех контроллерах в узле JS
- 24. Глобальная переменная Не обновляется во всех состояниях Phaser
- 25. Ruby on Rails - постоянная глобальная переменная во всех запросах
- 26. GAE Колба глобальная переменная настойчив во всех браузерах
- 27. панель инструментов во всех представлениях (глобальная панель инструментов)
- 28. Вывод файла cookie в Laravel-5/Blade
- 29. Laravel 5 Blade - странное появление в foreach
- 30. Laravel 5 Ubuntu Blade не отображается
http://laravel.com/docs/5.0/views#view-composers – lukasgeiter