2017-09-23 133 views
1

我加入這個變量.ENV文件Laravel .ENV變量總是返回null

STRIPE_SECRET = A12345

我想使用的路由轉儲變量/ web.php

<?php 
dd(env('STRIPE_SECRET')); 

但它看起來總是返回null。

更新:更新.env文件。我只刪除了DB_PASSWORD。

APP_NAME=Laravel 
APP_ENV=local 
APP_KEY=base64:08txDXXatyYsP5WQ4ECz35Q7OyBEe8Vgb/zK5fZsHik= 
APP_DEBUG=true 
APP_LOG_LEVEL=debug 
APP_URL=http://localhost 
APP_LOCALE=tr 
APP_LC_ALL=tr_TR.utf8 

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=gunluk 
DB_USERNAME=root 
DB_PASSWORD= 

BROADCAST_DRIVER=log 
CACHE_DRIVER=file 
SESSION_DRIVER=file 
QUEUE_DRIVER=sync 

REDIS_HOST=127.0.0.1 
REDIS_PASSWORD=null 
REDIS_PORT=6379 

MAIL_DRIVER=smtp 
MAIL_HOST=smtp.mailtrap.io 
MAIL_PORT=2525 
MAIL_USERNAME=03ac580c85842d 
MAIL_PASSWORD=1d6d902d296942 
MAIL_ENCRYPTION=null 

PUSHER_APP_ID= 
PUSHER_APP_KEY= 
PUSHER_APP_SECRET= 

STRIPE=a123 
STRIPE_SECRET=a12345 
+3

嘗試運行以下命令php artisan config:clear和 php artisan optimize – iCoders

+0

您確定您的應用程序密鑰?運行'php artisan key:generate'來確認,然後重試。 – tptcat

+0

重新生成密鑰後仍然返回null。 – Erdem

回答

1

主要您的問題的原因是您正在緩存您的配置。在運行php artisan config:cache時,您將配置存儲在緩存中,並且下次Laravel啓動它時將不會讀取.env文件,因爲它檢測到配置已存儲在緩存中。環境文件應該僅用於設置配置文件,然後訪問您要查找的值只能使用config方法。

讓我們假設你有一個包含這個內容的文件config/stripe.php

<?php 

return [ 
    'secret' => env('STRIPE_SECRET', '') 
]; 

一旦你通過你的應用程序代碼只使用語法config('stripe.secret')運行php artisan config:cache訪問此值。每當你更新你的配置文件和你的.env你需要再次運行php artisan config:cache

1

可以使用下面的命令

php artisan config:clear 
    php artisan optimize 
    php artisan config:cache 

還要確保清除配置緩存

如果您正在使用部署在config:cache命令,你必須確保你只調用ENV功能從您的配置文件中,而不是從您的應用程序的其他任何地方。 如果您在應用程序中調用env,強烈建議您將正確的配置值添加到配置文件中,並從該位置調用env,以允許將env調用轉換爲配置調用。

編號:

https://laracasts.com/discuss/channels/general-discussion/laravel-5-environment-detection-not-working?page=1

更新時間:

另外,還要確保你已經默認laravel改名.env.example.env file.env.example

Updated 2 

根據你新的更新問題你的env文件有STRIPESTRIPE_SECRET 讓你有這樣的訪問,如果它沒有問題錯字錯誤

env('STRIPE') 
+0

Still routes/web.php返回null。 – Erdem

+0

你確定你有.env文件沒有.env.example – iCoders

+0

當然,我有一個.en v文件。 – Erdem

1

確保你的應用程序完全啓動。

如果您使用cmd運行服務器,請嘗試重新啓動服務器。

如果不起作用,請嘗試使用@iCoders上面提到的方法清除緩存。

+0

我應該如何啓動應用程序。這個應用程序在我自己的服務器上運行,因此最近重新啓動 – Erdem

+0

它仍然不能正常工作? –

+0

您試圖獲取變量的位置 –

1

如果你有 STRIPE="a12345".env文件,或者如果您在.env文件或config文件中的任何改變,那麼你休耕這些步驟

一件事寫在逗號的變量值像STRIPE="a12345"

首先運行這些命令

  1. php artisan config:clear
  2. php artisan cache:clear

  3. composer dump-autoload

,最後用這個命令來獲取變量

dd(env('STRIPE')); 

這個工作對我來說

而且1愚蠢的建議:重新啓動服務器

我已添加所有可能的解決方案

1

首先,您的.env文件中沒有STRIPE_SECRET(按照之前的編輯問題)。所以請確保你的.env必須有這個變量。您應該通過以相同的順序執行以下命令來清除配置緩存

php artisan config:cache 
php artisan config:clear 

Laravel緩存您的配置文件,以便執行變得更快。因此,每次在服務器上更改配置文件時,都應該清除緩存。

此外,您還可以運行這些命令來清除其它高速緩存

php artisan cache:clear //for clearing the cache 
php artisan view:clear //for clearing the compiled views 
php artisan route:clear //for clearing the routes cache 

您還可以創建這些命令的路線,從代碼還調用命令,

Route::get('/cache-clear', function() { 
    $exitCode = Artisan::call('cache:clear'); 
    echo "Cache Cleard: ".$exitCode; 
}); 

Route::get('/view-clear', function() { 
    $exitCode = Artisan::call('view:clear'); 
    echo "View Cleard: ".$exitCode; 
}); 

Route::get('/route-cache', function() { 
    $exitCode = Artisan::call('route:cache'); 
    echo "Route Cached: ".$exitCode; 
}); 

Route::get('/route-clear', function() { 
    $exitCode = Artisan::call('route:clear'); 
    echo "Route Cache Cleared: ".$exitCode; 
}); 

Route::get('/config-cache', function() { 
    $exitCode = Artisan::call('config:cache'); 
    echo "Config Cached: ".$exitCode; 
}); 

Route::get('/config-clear', function() { 
    $exitCode = Artisan::call('config:clear'); 
    echo "Config Cache Cleared: ".$exitCode; 
});