Я запускаю Laravel 5.1 и имею несколько сред, некоторые из которых требуют SSL, а некоторые – нет. Когда мне требуется SSL, моя конфигурация в файле database.php требует в драйвере mysql следующего:
'options' => [ PDO::MYSQL_ATTR_SSL_KEY => env('MYSQL_SSL_KEY'), // /path/to/key.pem PDO::MYSQL_ATTR_SSL_CERT => env('MYSQL_SSL_CERT'), // /path/to/cert.pem PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_SSL_CA'), // /path/to/ca.pem PDO::MYSQL_ATTR_SSL_CIPHER => env('MYSQL_SSL_CIPHER') ]
Проблема в том, что когда я устанавливаю эти env () vars в null в средах, которые не используют SSL (например, локальный), он ломается (белый экран и т. Д.). Я должен либо не устанавливать ключ «options», либо устанавливать пустой пул для его работы, который удаляет env () vars, которые затем не будут работать в средах SSL.
Есть ли способ удовлетворить этот ключ, который работает как для SSL, так и для не-SSL-сред?
Вы можете определить новую переменную среды, которая включает или отключает использование SSL, а затем использовать тернарный оператор для загрузки соответствующей конфигурации.
Добавьте это в ваш .env
файл в средах, где требуется поддержка SSL:
MYSQL_SSL=true // not having this variable defined or being false, will disable SSL
В файле config/database.php
измените значение ключа параметра для подключения, которое будет загружено следующим образом:
'options' => (env('MYSQL_SSL')) ? [ PDO::MYSQL_ATTR_SSL_KEY => env('MYSQL_SSL_KEY'), // /path/to/key.pem PDO::MYSQL_ATTR_SSL_CERT => env('MYSQL_SSL_CERT'), // /path/to/cert.pem PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_SSL_CA'), // /path/to/ca.pem PDO::MYSQL_ATTR_SSL_CIPHER => env('MYSQL_SSL_CIPHER') ] : []
Обычно я не использую логику в файлах конфигурации, но это случай, когда может быть сделано исключение.