laravel多环境动态切换

需求:在开发的环境,本地环境,线上环境配置的文件都不相同时,需要能动态的切换不同的.env内的配置。

本文档将指导您如何在 Laravel 中实现多环境动态切换。通过使用不同的环境配置文件,您可以轻松地在开发、测试和生产环境中切换配置。

目录:

  1. 为什么需要多环境动态切换?
  2. Laravel 环境配置文件概述
  3. 如何在 Laravel 中设置环境变量
  4. 如何在 Laravel 中动态切换环境
  5. 示例:使用 .env 文件进行环境切换
  6. 常见问题与解决方案
  7. 结论

1. 为什么需要多环境动态切换?

在开发、测试和生产环境中,应用程序可能需要不同的配置设置。通过使用多环境动态切换,您可以为每个环境提供适当的配置,确保应用程序在不同环境下正常运行。这有助于提高应用程序的性能、安全性、日志记录等方面的配置。

2. Laravel 环境配置文件概述

Laravel 使用 .env 文件来存储环境特定的配置信息。该文件包含了应用程序的敏感信息,如数据库连接、密钥等。在应用程序的根目录下,您将找到 .env 文件。

3. 如何在 Laravel 中设置环境变量

在 .env 文件中,您可以设置各种环境变量。例如,要设置数据库连接,您可以添加以下行:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

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

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1

VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

4. 如何在 Laravel 中动态切换环境

在 Laravel 中,您可以使用 APP_ENV 环境变量来动态切换环境。要设置环境变量,您可以在app运行以下命令:

/**
 * @see .env
 * @author sky
 * @return \Illuminate\Contracts\Foundation\Application
 * @see 根据不同的env加载不同的配置文件,上线前请屏蔽当前代码
 * @see 2019-08-29 15:31:57
 * @version 1.0.0
 */
$env = $app->detectEnvironment(function () use ($app){
    $environmentPath = __DIR__ . '/../.env';
    $envContent = trim(file_get_contents($environmentPath));
    $environment = '';
    if(file_exists($environmentPath) && !empty($envContent)) {
        $lines = explode("\n", $envContent); // 将内容按行分割  
        foreach ($lines as $line) {  
            $trimmedLine = trim($line); // 去除行首行尾的空格和换行符  
            if (strpos($trimmedLine, '=') !== false) { // 检查行中是否包含"="字符  
                $keyValue = explode('=', $trimmedLine); // 将行按"="分割成键和值  
                $key = trim($keyValue[0]); // 去除键名前的空格和换行符  
                $value = trim($keyValue[1]); // 去除值前的空格和换行符  
                if ($key == 'APP_ENV') {
                    $environment = '.' . $value;
                    break;
                }
            }  
        }
    }
    $app->loadEnvironmentFrom('.env' . $environment);
});
5. 示例:使用 .env 文件进行环境切换

在 .env 文件中,您可以根据不同的环境设置不同的配置值。例如,在开发环境中,您可以设置数据库连接为本地数据库;而在生产环境中,您可以使用远程数据库连接。通过在 .env 文件中指定不同的配置值,您可以轻松地在不同环境中切换。请确保在部署应用程序之前将 .env 文件中的敏感信息替换为实际的值。

6. 常见问题与解决方案

  • 问题:无法加载 .env 文件
    解决方案:确保 .env 文件位于应用程序的根目录下,并且具有正确的权限。在某些情况下,您可能需要运行 php artisan config:cache 命令来清除配置缓存。
  • 问题:环境变量未生效
    解决方案:确保您在正确的位置设置了环境变量,并且使用了正确的语法。请检查您的代码中是否正确引用了环境变量。
  • 问题:在生产环境中暴露敏感信息
    解决方案:在部署应用程序之前,请确保将 .env 文件中的敏感信息替换为实际的值。不要将敏感信息留在 .env 文件中或将其包含在版本控制系统中。
  • 问题:无法在测试中设置环境变量
    解决方案:请确保在 phpunit 测试中正确设置了 $env 属性。此外,您还可以使用 phpunit.xml 文件来设置全局的环境变量。
  • 问题:应用程序加载了错误的配置文件
    解决方案:请确保在应用程序中正确引用了正确的配置文件。可以使用 config() 函数来获取正确的配置值。例如,config('database.default') 将返回默认数据库连接的名称。

备注:在.env文件里面配置APP_ENV=local,复制.env 为.env.local,并保留.env原文件,在bootstrap/app.php文件内添加上面的代码,即可动态切换laravel环境。

项目介绍

    基于Laravel 9 + Vue + MySQL的快速开发的后台管理系统。

    支持php8.0版本

    技术交流QQ群:533738074 加群请备注来源:如gitee、github、官网等

站点地址

  • 官方网站:http://ruan.scmls.cn

  • 文档地址:http://doc.scmls.cn

  • 演示地址:http://mango.scmls.cn/admin(账号:admin,密码:123456。备注:只有查看信息的权限)

你可能感兴趣的:(laravel,数据库,php)