Доступ к переменным 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


@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 говорит здесь является ключевым: use env() only in config files. Это лучший ответ на этот вопрос.
Патрос,

8

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

{{App::environment()}}

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


4

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


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 для получения дополнительной информации.



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

Так 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 .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.