Доступ до змінних .env Laravel у лезі


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 API OverheidIO. Я спробував отримати одну із змінних .env за замовчуванням на випадок, якщо я неправильно відформатував власні змінні .env .:

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

Чи може хтось допомогти мені зателефонувати за допомогою ключа API API Google і Overheidio на лезі?


12
Спробуйте запустити php artisan config:clearі випробувати env('APP_ENV')в майстерності. Для мене він повертає localрядок.
Олексій Мезенін

Дякую Олексію! php artisan config:clearзробив фокус.
Anna Jeanine

@Alexey Mezenin, чи не добре, якщо ви розміщуєте свій коментар як відповідь ?. Я дуже недавно використовую 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 має жорстку систему кешування
Deepesh Thapa

2
хороший матеріал, але увагу, окр ( «APP_ENV») зазнає невдачі в виробництві, см stackoverflow.com/a/57626957/4820095
ndberg

1
@ndberg, це коли ви використовуєте команду, php artisan config:cacheа я не використовую її. Будь ласка, прочитайте.
Учень

Привіт @ndberg. Я двічі переглянув твою відповідь на це запитання (посилання у коментарі вище), і ти php artisan config:cacheназиваєшся згадкою @Learner. АЛЕ, я не впевнений, чи потрібно відредагувати відповідь Учня, щоб додати пропущену команду, чи Ви помилились. Будь ласка, поясніть це.
Гільєрмо Гарсія

@Learner має рацію, він не використовує це у своїй відповіді, і це не потрібно. Але я просто хотів зазначити для всіх googler: зазвичай у виробництві ми використовуємо config: cache, і врешті-решт виклик, який використовується у питанні: "env ('APP.ENV')", спричинить проблеми. Тож це просто доповнення до цієї відповіді.
Ндберг,

29

Я реалізував це наступним чином:

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

Я рекомендую виконати таку команду: composer self-update


1
Це не вдасться, якщо ввімкнено кешування конфігурації. Використовуйте configзамість цього
ncatnow

1
Можна записати як@if(App::environment('production'))
Марвін Рабе,

15

ДУЖЕ ВАЖЛИВО

Всі env (), такі як: 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

приклад конфігурації 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


в blade:

{{ 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 config: clear
php artisan cache: clear
php artisan view: clear
php artisan route: clear
composer dump-autoload



0

Починаючи з Laravel 7.11 , ви можете використовувати директиви @env('')and і @production()в шаблонах blade:

@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 .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.