Доступ к переменным Laravel .env в Blade

86

Я пытаюсь получить некоторые ключи API, которые я сохранил в моем файле .env, для использования в javascript клинка. Я добавил два ключа, например:

APP_ENV=local
APP_KEY=////
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
APP_GOOGLE_MAPS=////
APP_OVERHEID_IO=////

В лезвии мне нужно использовать API Карт Google и ключ API OverheidIO. Я попытался получить одну из переменных .env по умолчанию на тот случай, если я неправильно отформатировал пользовательские переменные .env .:

{{ env('APP.ENV') }} // nothing
{{ env('APP_ENV') }} // nothing
{{ env('APP_ENV'), 'test' }} // returns 'test' 

Может ли кто-нибудь помочь мне вызвать ключи api карт Google и api overheidio в лезвии?

Анна Жанин
источник
12
Попробуйте запустить php artisan config:clearи протестировать env('APP_ENV')в тинкере. Для меня он возвращает localстроку.
Алексей Мезенин
Спасибо, Алексей! php artisan config:clearсделали свое дело.
Анна Жанин,
@ Алексей Мезенин, разве не нормально, если вы разместите свой комментарий как Ответ ?. Я новичок в использовании SO и не очень понимаю правила.
Manian
Возможный дубликат Laravel 5.3 - env ​​() всегда возвращает значение null
Евгений Афанасьев
@YevgeniyAfanasyev, этот вопрос - дубликат моего, я уже задавала его раньше ...
Анна Жанин

Ответы:

109

Пять наиболее важных команд, если ваш Laravel не работает должным образом после некоторых изменений в .env или папке базы данных или из-за любых других изменений. Вот полное объяснение: https://www.youtube.com/watch?v=Q1ynDMC8UGg

php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan view:clear
php artisan route:clear
Ученик
источник
1
Именно поэтому иногда в Laravel 5.5 жесткая система кеширования
Дипеш Тапа
2
хороший материал, но внимание, env ('APP_ENV') выйдет из строя в производстве, см. stackoverflow.com/a/57626957/4820095
ndberg
1
@ndberg, это когда вы используете команду, php artisan config:cacheа я ее не использую. Пожалуйста прочти.
Учащийся
Привет, @ndberg, я дважды рассмотрел ваш ответ на этот вопрос (ссылка в комментарии выше), и вы упоминаете php artisan config:cacheкак @Learner упоминает. НО, я не уверен, нужно ли отредактировать ответ Учащегося, чтобы добавить недостающую команду, или вы допустили ошибку. Пожалуйста, проясните.
Гильермо Гарсия,
@Learner прав, он не использует его в своем ответе, и это не нужно. Но я просто хотел обрисовать в общих чертах для всех гуглеров: обычно в производственной среде мы используем config: cache, и в конечном итоге вызов, использованный в вопросе: «env ('APP.ENV')» принесет проблемы. Так что это просто дополнение к этому ответу.
ndberg
29

Я реализовал это следующим образом:

@if (env('APP_ENV')!='Production')
Enviroment Test
@endif

Я рекомендую выполнить следующую команду: composer self-update

Армандо Кордова
источник
1
Это не удастся, если включено кэширование конфигурации. Используйте configвместо
ncatnow
1
Можно записать как@if(App::environment('production'))
Marvin Rabe
15

ОЧЕНЬ ВАЖНО

Все env () like: env('APP_ENV')вызовы НЕ РАБОТАЮТ в продакшене (когда вы используете php artisan config:cache)

Что использовать?
- используйте env () только в файлах конфигурации
- используйте App :: environment () для проверки среды (APP_ENV в .env).
- используйте config ('app.var') для всех других переменных env, например. config ('app.debug')
- создавать собственные файлы конфигурации для ваших собственных переменных ENV. Пример:
в вашем .env:

MY_VALUE=foo

пример config app / myconfig.php

return [
    'myvalue' => env('MY_VALUE', 'bar'), // 'bar' is default if MY_VALUE is missing in .env
];

Доступ в вашем коде:

config('myconfig.myvalue') // will result in 'foo'

Подробнее смотрите ЗДЕСЬ

ndberg
источник
Что @ndberg говорит здесь является ключевым: use env() only in config files. Это лучший ответ на этот вопрос.
Патрос,
8

Если вы хотите получить среду приложения, попробуйте следующее:

{{App::environment()}}

Другие переменные не пробовал.

Джнанаранджан
источник
4

Это вызывает проблемы с использованием env () где-либо еще, кроме папки config /. Используйте env там, а затем config () в других частях приложения.

Alex
источник
4

Вы должны получать доступ только к .envзначениям непосредственно внутри файлов конфигурации, а затем обращаться к ним отовсюду (контроллеры, представления) из файлов конфигурации с помощью config()помощника.

Например:

.env

TEST_URL=http://test

config / app.php

return [
   'test_url' => env('TEST_URL','http://default.url')
];

ресурсы / просмотры / welcome.blade.php

{{ config('app.test_url')}}

см. кеширование конфигурации из документации laravel для получения дополнительной информации.

Medard Mandane
источник
3
php artisan config:clear

должен исправить это

Лука К.
источник
3

Вот ссылка на документацию: https://laravel.com/docs/6.x/configuration#retrieving-environment-configuration

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

@if(App::environment('development'))
    Error: {{ $record->s_error }}
@else
    XML Parsing Error - Please double check that your file is formatted correctly.
@endif
Дж. Р. Лоурн
источник
1

получить значения здесь: config/app.php


в лезвии:

{{ config('app.name', 'default value here') }}

в классе / контроллере:

config('app.name', 'default value here')
Мхар Даниэль
источник
0

Эта команда должна быть написана после редактирования файла .env для удобного доступа к переменным.

php artisan config:cache
Ахмед Махмуд
источник
0

У меня также были проблемы с получением значения из файла .env, тогда я сделал это, и это помогло:

  1. Проверьте файл env и убедитесь, что вы указали правильное значение.
  2. затем проверьте лезвие или контроллер, где вы используете эту переменную из файла .env.
  3. Если оба вышеуказанных шага выполнены правильно, вам просто нужно выполнить следующие шаги -

Конфигурация php artisan: очистить
кеш
php artisan: очистить представление
php artisan: очистить путь мастера php: очистить
дамп-автозагрузку композитора

АБХИШЕК ШУКЛА
источник
0

Завидовать можно следующим образом:

@if (env('APP_ENV')!='Production')
Enviroment Test
@endif

см ссылку

хаммад хан
источник
0

Так Laravel 7.11 , вы можете использовать @env('')и @production()директивы в блейд - шаблонов:

@env('staging')
    // The application is running in "staging"...
@endenv

@env(['staging', 'production'])
    // The application is running in "staging" or "production"...
@endenv

или

@production
    // Production specific content...
@endproduction

См. Также документацию Laravel Blade .

Аттила Фулоп
источник