Я хочу, чтобы некоторые данные по умолчанию были доступны во всех представлениях моего приложения Laravel 5.
Я пытался найти его , но только найти результаты для Laravel 4. Я прочитал документацию «Обмен данными со всеми Просмотров : » здесь , но я не могу понять , что делать. Где следует разместить следующий код?
View::share('data', [1, 2, 3]);
Спасибо за вашу помощь.
*
составителей представлений, особенно при использовании запросов к базе данных, поскольку они запускаются для каждого включенного подвида, компонента и т. Д., Поэтому вы можете запустить сотни ненужных запросов, лучше всего использовать базовое представление, например макеты. приложение затем передает данные по мере необходимости.Ответы:
Этой цели можно достичь разными способами,
1. Использование BaseController
Как мне нравится, я создаю
BaseController
класс, расширяющий собственный LaravelController
, и настраиваю там различные глобальные вещи. Все остальные контроллеры затем расширяются,BaseController
а не из контроллера Laravel.2. Использование фильтра
Если вы точно знаете, что хотите, чтобы что-то было настроено для представлений по каждому запросу во всем приложении, вы также можете сделать это с помощью фильтра, который запускается перед запросом - именно так я работаю с объектом User в Laravel.
ИЛИ
Вы можете определить свой собственный фильтр
и вызвать его через простой вызов фильтра.
Обновление согласно версии 5. *
3. Использование промежуточного программного обеспечения
Используя
View::share
сmiddleware
4. Использование View Composer
View Composer также помогает привязать определенные данные для просмотра разными способами. Вы можете напрямую привязать переменную к определенному представлению или ко всем представлениям. Например, вы можете создать свой собственный каталог для хранения файла композитора представления в соответствии с требованиями. и эти файлы композитора представления через Службу обеспечивают взаимодействие с представлением.
Метод View composer может использоваться по-разному. Первый пример может выглядеть одинаково:
Вы можете создать
App\Http\ViewComposers
каталог.Поставщик услуг
После этого добавьте этого провайдера в config / app.php в разделе «провайдеры».
TestViewComposer
ViewName.blade.php
Этот метод может помочь только для определенного вида. Но если вы хотите запускать ViewComposer для всех представлений, мы должны применить это единственное изменение к ServiceProvider.
Ссылка
Документация Laravel
Для дальнейшего разъяснения Эпизод Laracast
Если с моей стороны все еще что-то неясно, дайте мне знать.
источник
register()
метод - он не является обязательным*
. Если вы не используете,*
то все будет в порядке.Вы можете создать своего собственного поставщика услуг (
ViewServiceProvider
имя общепринятое) или использовать существующегоAppServiceProvider
.В выбранном вами провайдере поместите свой код в метод загрузки.
Это сделает
$data
переменную доступной во всех ваших представлениях.Если вы предпочитаете использовать фасад вместо помощника, измените его
view()->
на,View::
но не забудьте, чтобы он былuse View;
в верхней части файла.источник
AppServiceProvider
которыми вы можете поделиться, это нормально, но если у вас есть что-то большее, вам следует подумать о создании нового провайдера.composer update
тоже не работает. На самом деле это вообще не стреляетboot()
. Мне нужно поделиться двумя переменными.Я обнаружил, что это самый простой способ. Создайте нового поставщика и используйте
'*'
подстановочный знак, чтобы прикрепить его ко всем представлениям. Работает и в 5.3 :-)источник
Лучшим способом было бы поделиться переменной с помощью
View::share('var', $value);
Проблемы с составлением при использовании
"*"
:Рассмотрим следующий подход:
Из примера вида лезвия:
Что случается?
GlobalComposer
Класс инстанциируется 1000 раз используяApp::make
.composing:some_partial_view_to_display_i
обрабатывается 1000 раз.compose
Функция внутриGlobalComposer
класса называется 1000 раз.Но частичный вид не
some_partial_view_to_display_i
имеет ничего общего с составленными переменными,GlobalComposer
а сильно увеличивает время рендеринга.Лучший подход?
Использование
View::share
сгруппированного промежуточного программного обеспечения.Обновить
Если вы используете что-то, что вычисляется по конвейеру промежуточного программного обеспечения, вы можете просто прослушать соответствующее событие или поместить промежуточное программное обеспечение общего доступа к просмотру в последний конец конвейера.
источник
В документации:
Я согласен с Marwelln, просто вставьте его
AppServiceProvider
в функцию загрузки:Я рекомендую использовать конкретное имя для переменной, чтобы избежать путаницы или ошибок с другими, не «глобальными» переменными.
источник
Документация слышна https://laravel.com/docs/5.4/views#view-composers, но я сломаю ее
Найдите каталог app \ Providers в корневом каталоге вашего приложения и создайте файл ComposerServiceProvider.php, скопируйте и вставьте в него текст ниже и сохраните его.
В корне вашего приложения откройте Config / app.php и найдите в файле раздел Providers, скопируйте и вставьте этот App \ Providers \ ComposerServiceProvider в массив.
Сделав это, мы создали поставщика услуг Composer. Когда вы запускаете свое приложение с представлением Profile, например http: // yourdomain / something / profile , вызывается поставщик услуг ComposerServiceProvider, и создается экземпляр класса App \ Http \ ViewComposers \ ProfileComposer, вызывающего метод Composer из-за кода ниже внутри метод или функция загрузки.
Перейдите в путь к каталогу app / Http
Создайте каталог под названием ViewComposers
Создайте файл ProfileComposer.php .
Теперь перейдите к вашему представлению или, в данном случае, Profile.blade.php и добавьте
и это покажет количество пользователей на странице профиля.
Чтобы показать счетчик на всех страницах, измените
к
источник
Я думаю, что лучше всего с
View Composers
. Если кто-то пришел сюда и хочет узнать, как это сделать с помощью View Composers, прочитайте мой ответ => Как поделиться переменной во всех представлениях?источник
Документация находится здесь https://laravel.com/docs/5.4/views#view-composers, но я разобью ее 1. Найдите поставщиков каталогов в корневом каталоге и создайте файл для ComposerServiceProvider.php с содержимым
источник
Внутри папки конфигурации вы можете создать файл php, назовите его, например, «variable.php», с содержимым ниже:
Теперь внутри всех представлений вы можете использовать это как
источник
1) В (app \ Providers \ AppServiceProvider.php)
2) в вашей модели пользователя
3) на ваш взгляд
источник
Метод Laravel 5.6: https://laravel.com/docs/5.6/views#passing-data-to-views
Пример с совместным использованием коллекции моделей для всех представлений (AppServiceProvider.php):
источник
У вас есть два варианта:
1. Поделиться через функцию загрузки в App \ Providers \ AppServiceProvider
public function boot() { view()->share('key', 'value'); }
И получить доступ к переменной $ key в любом файле представления.
Примечание. Помните, что здесь вы не можете получить доступ к данным текущего сеанса, аутентификации и маршрута. Этот вариант хорош, только если вы хотите поделиться статическими данными. Предположим, вы хотите поделиться некоторыми данными на основе текущего пользователя, маршрута или любой настраиваемой переменной сеанса, которую вы не сможете сделать с этим.
'aliases' => [ ..., 'Helper' => App\HelperClass\Helper::class, ],
и создайте Helper.php в папке HelperClass в папке приложения
и получить доступ к нему где угодно, как
Helper::Sample()
Здесь вы не будете ограничены использованием Auth, Route, Session или любых других классов.
источник