Получить значение среды в контроллере
В моем файле.env у меня есть следующее:
IMAP_HOSTNAME_TEST=imap.gmail.com
IMAP_USERNAME_TEST=myemail@gmail.com
IMAP_PASSWORD_TEST=mypw
Теперь я хотел бы использовать их в моем контроллере. Я пробовал это, но безрезультатно:
$hostname = config('IMAP_HOSTNAME_TEST');
Переменная $hostname равна нулю. Как я могу использовать эти переменные конфигурации в моем контроллере?
16 ответов
Попробуйте это с
<?php $hostname = env("IMAP_HOSTNAME_TEST", "somedefaultvalue"); ?>
Не работает в Laravel 5.3+, если вы хотите получить доступ к значению из контроллера, как показано ниже, он всегда возвращает ноль
<?php
$value=env('MY_VALUE','default_value');
РЕШЕНИЕ: Скорее вам нужно создать файл в папке config.. скажем values.php, а затем написать коды, как показано ниже
values.php
<?php
return [
'myvalue' => env('MY_VALUE',null),
//add other values as you want
]
Затем получите доступ к значению в вашем контроллере с помощью следующего кода
<?php
$value=\Config::get('credentials.myvalue')
Где "учетные данные" - это имя файла, за которым следует ключ "myvalue". Надеюсь, это поможет
Я думал, что добавлю ответ, чтобы упростить то, что было сказано в прошлом. Только конфигурационные файлы могут получить доступ к переменным env - и затем передать их.
Шаг 1.) Добавьте вашу переменную в ваш .env
файл, т.е.
EXAMPLE_URL="http://google.com"
Шаг 2.) Создайте новый файл внутри config
папка, любое имя, т.е.
config/example.php
Шаг 3.) Внутри этого нового файла я добавляю возвращаемый массив, содержащий эту переменную env.
<?php
return [
'url' => env('EXAMPLE_URL')
];
Шаг 4.) Поскольку я назвал его "example", моя конфигурация "namespace" теперь является примером. Итак, теперь в моем контроллере я могу получить доступ к этой переменной с помощью:
$url = \config('example.url');
Совет - если вы добавите use Config;
в верхней части вашего контроллера вам не нужна обратная косая черта (которая обозначает корневое пространство имен). То есть.
namespace App\Http\Controllers;
use Config; // Added this line
class ExampleController extends Controller
{
public function url() {
return config('example.url');
}
}
--- ВАЖНО --- Не забудьте войти в консоль php artisan config:cache
как только вы создали файл example.php. Файлы конфигурации и переменные кэшируются, поэтому, если вы вносите изменения, вам необходимо очистить этот кэш - то же самое относится и к .env
файл изменен / добавлен в.
Все переменные, перечисленные в .env
файл будет загружен в $_ENV
PHP суперглобальный, когда ваше приложение получает запрос. Оформить заказ страницы конфигурации Laravel
$_ENV['yourkeyhere'];
Вы можете использовать с этим форматом (протестировано на Laravel 5.5), в моем случае я использовал для получения данных о соединениях с базой данных и использования на контроллере:
$User = env('DB_USERNAMEchild','');
$Pass = env('DB_PASSWORDchild','');
Второй параметр может иметь значение NULL или устанавливать любое значение по умолчанию, если DB_USERNAMEchild имеет значение NULL.
Ваш.env файл может быть таким же:
DB_HOST=localhost
DB_DATABASE=FATHERBD
DB_USERNAME=root
DB_PASSWORD=password
DB_DATABASEchild=ZTEST
DB_USERNAMEchild=root
DB_PASSWORDchild=passwordofchild
Лучше поместить переменные конфигурации в файл конфигурации.
В вашем случае я бы предложил поместить ваши переменные в config/mail.php как
'imap_hostname' => env('IMAP_HOSTNAME_TEST', 'imap.gmail.com')
и обратиться к ним по
config('mail.imap_hostname')
Сначала он пытается получить значение переменной config в файле .env, и если он не может найти значение переменной в файле .env, он получит значение переменной из config/mail.php
Как отметил @Rajib, вы не можете получить доступ к своим переменным env, используя config('myVariable')
- Сначала вам нужно добавить переменную в файл.env.
- Добавьте переменную в какой-нибудь файл конфигурации в
config
каталог. Я обычно добавляю кconfig/app.php
- После этого будет доступ к ним как
Config::get('fileWhichContainsVariable.Variable');
с использованиемConfig
Фасад
Возможно, вам придется очистить кеш конфигурации, используя php artisan config:clear
И вам также придется перезапустить сервер.
InController
$hostname = $_ENV['IMAP_HOSTNAME_TEST']; (or) $hostname = env('IMAP_HOSTNAME_TEST');
В blade.view
{{$_ENV['IMAP_HOSTNAME_TEST']}}
Вы можете добавить ценность в свой
.env
файл
VALUE=somevalue
on the controller
$_ENV['VALUE']
or
env('VALUE')
если не работает, запустите эту команду
php artisan config:clear
Принятый ответ больше не действует после
Laravel 5.2
версия:
Чтобы получить значения среды в контроллерах или (любой файл php в проекте laravel), у вас есть два случая:
Случай 1 (предопределенные ключи) : если вам нужно получить значение из файла, созданного проектом Laravel как (файл .env по умолчанию), или сторонним плагином, который вы уже установили, и следуйте правильной процедуре установки, см. Этот ответ для объясните: /questions/8898466/laravel-53-env-vsegda-vozvraschaet-nol/59391777#59391777
Случай 2 ( не предопределенные ключи - если вам нужно сгенерировать новый настраиваемый ключ среды) : для этого следуйте этим инструкциям:
- Добавьте свой собственный ключ в файл, например, я добавлю этот ключ:
UNIFONIC_APP_ID=xx2Erdasd7Ik7XfdesfaV9HX472. Добавьте новый файл php в папку, например, я добавлю этот файл
config/custom.php
и его содержимое выглядит так:
return [
'unifonic_id' => env('UNIFONIC_APP_ID' , 'Here Default value will used of UNIFONIC_APP_ID not defined in .env file'),
];
- Запустите эти команды буксировки в терминале:
php artisan config:clear php artisan config:cache
- Теперь в любом файле php (контроллеры, модели, представления и т. Д.) Вы можете вызвать эту функцию:
config('custom.unifonic_id');
Где
custom
- это имя файла php, созданного в, и
unifonic_id
это ключ массива, который определен в
step 2
Это вернет значение, если
UNIFONIC_APP_ID
который определен в
.env
, если не существует, вернет значение по умолчанию, которое определено в файле конфигурации
in step 2
Примечание 1: файл конфигурации может возвращать многомерный массив, обратите внимание на структуры файлов конфигурации, которые расположены в
laravel_root/config
папка.
Примечание 2: вы можете изменить файл
laravel_root/config/services.php
insted создания нового файла конфигурации ...
ВLaravel 7
Я получаю доступ.env
такие переменные.
У вас уже есть файл с именемservices.php
внутри папки конфигурации.
определите новый массив, как показано ниже
'env_var'=>[
'host' => env('DB_HOST'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'database' => env('DB_DATABASE'),
]
теперь бегиphp artisan config:cache
внутри импорта вашего контроллераuse Illuminate\Support\Facades\Config;
Теперь вы можете получить доступ к таким
$server = Config::get('services.env_var.host');
$username = Config::get('services.env_var.username');
$password = Config::get('services.env_var.password');
$database = Config::get('services.env_var.database');
Я надеюсь, что это поможет кому-то.
Вы не можете получить доступ к переменной среды таким образом.
Внутри .env
файл, который вы пишете
IMAP_HOSTNAME_TEST=imap.gmail.com // I am okay with this
Далее внутри config
В папке есть файл mail.php. Вы можете использовать этот файл для программирования. Поскольку вы работаете с почтой. Вы также можете использовать другой файл.
return [
//..... other declarations
'imap_hostname_test' => env('IMAP_HOSTNAME_TEST'),
// You are hiding the value inside the configuration as well
];
Вы можете вызвать переменную из контроллера, используя 'config(
. Какой бы файл вы ни использовали в папке config. Вам нужно использовать этоfile name (without extension) + '.' + 'variable name' + ')'
. В текущем случае вы можете вызвать переменную следующим образом.
$hostname = config('mail.imap_hostname_test');
Поскольку вы объявляете переменную внутри mail.php, а имя переменной - imap_hostname_test
, вам нужно называть это так. Если вы объявите эту переменную внутриapp.php
тогда тебе следует позвонить
$hostname = config('app.imap_hostname_test');
в Laravel Controlller
public static function mail($param)
{
//$_ENV['yourkeyhere'];
$mailgunsecret = env('MAILGUN_SECRET');
$mailguurl = env('MAILGUN_DOMAIN');
}
в файлах Laravel Blade
@if (env('APP_ENV')!='Production')
Enviroment Test
@endif
must run this commands
php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan view:clear
php artisan route:clear
Пример: доступ к переменным Laravel .env в блейде
APP_ENV=local
APP_KEY=////
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
APP_GOOGLE_MAPS=////
APP_OVERHEID_IO=////
{{ env('APP_ENV') }} // returns 'local'
{{ env('APP_URL') }} // returns 'http://localhost'
В книге Мэтта Штауффера он предлагает создать массив в вашем
config/app.php
чтобы добавить переменную, а затем в любом месте, где вы на нее ссылаетесь, с помощью:
$myvariable = new Namearray(config('fileWhichContainsVariable.array.ConfigKeyVariable'))
Попробовали это решение? хорошо ?
В файле config/app.php создайте экземпляр переменной env, например
'name' => env('APP_NAME', 'Laravel')
& В вашем контроллере назовите это как
config('app.name')
Выполните следующие команды
php artisan config:cache
php artisan cache:clear
если не работает.
Может быть не связано, но может кому-то помочь.... в Laravel просто dd(config('app.env')); и вы увидите "местный" или "производство"