การเข้าถึงตัวแปร Laravel .env ในเบลด


89

ฉันกำลังพยายามหาคีย์ API ที่เก็บไว้ในไฟล์. env เพื่อใช้ในเบลดจาวาสคริปต์ ฉันได้เพิ่มคีย์สองปุ่มเช่น:

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

ฉันจำเป็นต้องใช้ Google Maps API และคีย์ OverheidIO API ฉันได้ลองรับหนึ่งในตัวแปร. env เริ่มต้นในกรณีที่ฉันจัดรูปแบบตัวแปร. env ที่กำหนดเองผิด:

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

ใครช่วยฉันโทรหา google maps api และ overheidio api key ในเบลดได้ไหม


12
ลองเรียกใช้php artisan config:clearและทดสอบenv('APP_ENV')ในคนจรจัด สำหรับฉันมันส่งคืนlocalสตริง
Alexey Mezenin

ขอบคุณ Alexey! php artisan config:clearทำเคล็ดลับ
Anna Jeanine

@ Alexey Mezenin ไม่เป็นไรถ้าคุณโพสต์ความคิดเห็นของคุณเป็นคำตอบ? ฉันค่อนข้างใหม่กับการใช้ SO & ไม่ค่อยชัดเจนเกี่ยวกับกฎ
manian


@YevgeniyAfanasyev คำถามนั้นซ้ำกับของฉันฉันเคยถามมันก่อนหน้านี้ ...
Anna Jeanine

คำตอบ:


111

คำสั่งที่สำคัญที่สุดห้าคำสั่งหาก 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
ของดี แต่ความสนใจ env ('APP_ENV') จะล้มเหลวในการผลิตโปรดดูstackoverflow.com/a/57626957/4820095
ndberg

1
@ndberg นั่นคือเมื่อคุณใช้คำสั่งphp artisan config:cacheและฉันไม่ได้ใช้คำสั่งนั้น กรุณาอ่าน.
ผู้เรียน

สวัสดี @ndberg ฉันตรวจสอบคำตอบของคุณสำหรับคำถามนี้สองครั้ง (ลิงก์ในความคิดเห็นด้านบน) และคุณอ้างถึงphp artisan config:cacheตามที่ @Learner กล่าวถึง แต่ฉันไม่แน่ใจว่าต้องแก้ไขคำตอบของผู้เรียนเพื่อเพิ่มคำสั่งที่ขาดหายไปหรือถ้าคุณทำผิด กรุณาชี้แจง
Guillermo Garcia

@ ผู้เรียนพูดถูกเขาไม่ได้ใช้มันในคำตอบและไม่จำเป็น แต่ฉันแค่อยากจะร่างสำหรับ googler ทั้งหมด: โดยปกติในการผลิตเราใช้ config: cache และในที่สุดการโทรตามที่ใช้ในคำถาม: "env ('APP.ENV')" จะทำให้เกิดปัญหา ดังนั้นจึงเป็นเพียงส่วนเสริมของคำตอบนี้
ndberg

32

ฉันได้ใช้งานด้วยวิธีต่อไปนี้:

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

คำแนะนำของฉันคือดำเนินการคำสั่งต่อไปนี้: composer self-update


2
สิ่งนี้จะล้มเหลวหากเปิดใช้งานการแคชการกำหนดค่า ใช้configแทน
ncatnow

2
เขียนได้ว่า@if(App::environment('production'))
Marvin Rabe

จาก Laravel 7.1+ คุณสามารถใช้ @env (['development', 'local', 'etc etc']) .... @endenv
James

20

สำคัญมาก

env () ทั้งหมดเช่น: การenv('APP_ENV')โทรจะไม่ทำงานในการผลิต (เมื่อคุณใช้php artisan config:cache)

จะใช้ทำอะไร?
- ใช้ env () เฉพาะในไฟล์ config
- ใช้ 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'

รายละเอียดเพิ่มเติมดูที่นี่


1
สิ่งที่ @ndberg พูดนี่คือกุญแจสำคัญ: use env() only in config files. นี่คือคำตอบที่ดีที่สุดสำหรับคำถามนี้
Pathros


4

ทำให้เกิดปัญหาในการใช้ env () ที่อื่นที่ไม่ใช่ใน config / โฟลเดอร์ ใช้ env ในนั้นแล้ว config () ในส่วนอื่น ๆ ของแอพ


4

นี่คือลิงค์ไปยังเอกสาร: 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

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 สำหรับข้อมูลเพิ่มเติม


4

ตั้งแต่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



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 config: ล้าง
php artisan cache: ล้าง
php artisan view: clear
php artisan route: clear
composer dump-autoload

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.