Получить значение среды в контроллере

В моем файле.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')

  1. Сначала вам нужно добавить переменную в файл.env.
  2. Добавьте переменную в какой-нибудь файл конфигурации в configкаталог. Я обычно добавляю кconfig/app.php
  3. После этого будет доступ к ним как 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 ( не предопределенные ключи - если вам нужно сгенерировать новый настраиваемый ключ среды) : для этого следуйте этим инструкциям:

  1. Добавьте свой собственный ключ в файл, например, я добавлю этот ключ:

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'),

];
  1. Запустите эти команды буксировки в терминале:
       php artisan config:clear
php artisan config:cache
  1. Теперь в любом файле 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')); и вы увидите "местный" или "производство"

Другие вопросы по тегам