Truy cập các biến Laravel .env trong phiến


86

Tôi đang cố gắng lấy một số khóa API mà tôi đã lưu trữ trong tệp .env của mình để sử dụng trong javascript phiến. Tôi đã thêm hai khóa như:

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

Trong phiến, tôi cần sử dụng API Google Maps và khóa API OverheidIO. Tôi đã thử lấy một trong các biến .env mặc định đề phòng trường hợp tôi định dạng sai các biến .env tùy chỉnh.:

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

Ai đó có thể giúp tôi gọi api bản đồ google và phím api overheidio trong phiến không?


12
Cố gắng chạy php artisan config:clearvà kiểm tra env('APP_ENV')trong tinker. Đối với tôi, nó trả về localchuỗi.
Alexey Mezenin

Cảm ơn Alexey! php artisan config:clearđã lừa.
Anna Jeanine

@Alexey Mezenin, bạn có đăng nhận xét của mình dưới dạng Câu trả lời không? Tôi khá mới sử dụng SO và không rõ ràng lắm về các quy tắc.
manian


@YevgeniyAfanasyev câu hỏi đó là một bản sao của tôi, tôi hỏi nó trước khi ...
Anna Jeanine

Câu trả lời:


109

Năm lệnh quan trọng nhất nếu Laravel của bạn không hoạt động như mong đợi sau một số sửa đổi trong .env hoặc thư mục cơ sở dữ liệu hoặc do bất kỳ sửa đổi nào khác. Đây là giải thích đầy đủ: 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
Chính là lý do đôi khi, Laravel 5,5 có một hệ thống bộ nhớ đệm cứng
Deepesh Thapa

2
nội dung tốt, nhưng cần chú ý, env ('APP_ENV') sẽ không thành công trong quá trình sản xuất, hãy xem stackoverflow.com/a/57626957/4820095
ndberg

1
@ndberg đó là khi bạn sử dụng lệnh php artisan config:cachevà tôi không sử dụng lệnh đó. Xin vui lòng đọc.
Người học

Xin chào @ndberg Tôi đã xem xét kỹ câu trả lời của bạn cho câu hỏi này (liên kết trong nhận xét ở trên) và bạn gọi php artisan config:cachelà đề cập của @Learner. NHƯNG, tôi không chắc liệu câu trả lời của Người học có cần được chỉnh sửa để bổ sung lệnh còn thiếu hay không, hay bạn đã mắc lỗi. Xin vui lòng, làm rõ nó.
Guillermo Garcia

@Learner nói đúng, anh ấy không sử dụng nó trong câu trả lời của mình và nó không cần thiết. Nhưng tôi chỉ muốn phác thảo cho tất cả các googler: thường trong sản xuất, chúng tôi sử dụng config: cache, và cuối cùng lời gọi như được sử dụng trong câu hỏi: "env ('APP.ENV')" sẽ mang lại rắc rối. Vì vậy, nó chỉ là một bổ sung cho câu trả lời này.
ndberg

29

Tôi đã triển khai nó theo cách sau:

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

Khuyến nghị của tôi là thực hiện lệnh sau: composer self-update


1
Điều này sẽ không thành công nếu bộ nhớ đệm cấu hình được bật. Sử dụng configthay thế
ncatnow

1
Có thể viết là@if(App::environment('production'))
Marvin Rabe

16

RẤT QUAN TRỌNG

Tất cả env () như: env('APP_ENV')gọi KHÔNG LÀM VIỆC trong sản xuất (khi bạn sử dụng php artisan config:cache)

Dùng cái gì?
- chỉ sử dụng env () trong các tệp cấu hình
- sử dụng App :: environment () để kiểm tra môi trường (APP_ENV trong .env).
- sử dụng config ('app.var') cho tất cả các biến env khác, ví dụ: config ('app.debug')
- tạo các tệp cấu hình riêng cho các biến ENV của riêng bạn. Ví dụ:
Trong .env của bạn:

MY_VALUE=foo

ví dụ config app / myconfig.php

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

Truy cập bằng mã của bạn:

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

Thông tin chi tiết xem TẠI ĐÂY


Có gì @ndberg nói đây là chìa khóa: use env() only in config files. Đây là câu trả lời tốt nhất cho câu hỏi này.
Pathros

8

Nếu bạn muốn có được môi trường của ứng dụng, hãy thử cách này:

{{App::environment()}}

Tôi chưa thử các biến khác.


4

Nó gây ra sự cố khi sử dụng env () ở bất kỳ đâu khác ngoài thư mục config /. Sử dụng env trong đó và sau đó config () trong các phần khác của ứng dụng


4

Bạn chỉ nên truy cập .envcác giá trị trực tiếp bên trong tệp cấu hình, sau đó truy cập chúng từ mọi nơi (bộ điều khiển, chế độ xem) từ tệp cấu hình bằng trình config()trợ giúp

Ví dụ:

.env

TEST_URL=http://test

config / app.php

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

resource / views / welcome.blade.php

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

xem bộ nhớ đệm cấu hình từ tài liệu laravel để biết thêm thông tin.



3

Đây là liên kết đến tài liệu: https://laravel.com/docs/6.x/configuration#retrieving-enosystem-configuration

Trong ví dụ dưới đây, tôi chỉ ra lỗi thực sự khi tôi ở trong môi trường phát triển của mình nhưng lại đưa ra thông báo chung chung nếu ở bất kỳ môi trường nào khác.

@if(App::environment('development'))
    Error: {{ $record->s_error }}
@else
    XML Parsing Error - Please double check that your file is formatted correctly.
@endif

1

lấy giá trị ở đây: config/app.php


trong phiến:

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

trong lớp / bộ điều khiển:

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

0

Lệnh này sẽ được viết sau khi bạn chỉnh sửa tệp .env để truy cập các biến một cách dễ dàng

php artisan config:cache

0

tôi cũng gặp sự cố khi lấy giá trị từ tệp .env, sau đó tôi đã làm điều này và nó đã giúp:

  1. Kiểm tra tệp env và xem liệu bạn đã cung cấp giá trị chính xác chưa.
  2. sau đó kiểm tra phiến hoặc bộ điều khiển nơi bạn sử dụng biến đó từ tệp .env.
  3. nếu cả hai bước trên đều đúng, bạn chỉ cần thực hiện các bước sau -

cấu hình php artist: xóa
bộ nhớ cache của php artist: clear
php artist view: clear
php artist route: clear
composer dump-autoload


0

Bạn có thể xác minh env bằng cách sau:

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

liên kết giới thiệu


0

Kể từ Laravel 7.11 , bạn có thể sử dụng các lệnh @env('')@production()trong các mẫu lưỡi:

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

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

hoặc là

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

Xem thêm trong Tài liệu về Lưỡi dao Laravel .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.