WAMP Laravel - 将 API 请求从一个本地站点发送到另一个本地站点会混淆环境变量



我正在开发一个API服务,我开发的另一个网站将使用该服务。因此,在本地构建和测试时,显然我希望站点的两个本地副本都可以正常工作。但是,它似乎混淆了environment变量。

例如:

  • Site AAPP_URL=http://a.local
  • Site BAPP_URL=http://b.local
  • 我从Site A代码发送GET请求(使用Guzzlehttp://b.local/test
  • Site B/test尾部简直是倾倒dump(env('APP_URL'))
  • Site A检索的结果"http://a.local"
  • 预期成果:"http://b.local"

因此,Site B中的代码使用从Site A加载的环境变量运行。这是一个问题,因为Site B无法访问正确的数据库,它正在尝试使用Site A的数据库。

这是我的本地设置(Win10 + WAMP(,PHP设置,Laravel设置的问题吗?

我也遇到了这个问题,这里提到了。它的解决方案是在两个项目中运行php artisan config:cache,以缓存.env文件中的配置或从此处修补代码。

您是否使用工匠命令使用不同的端口运行两个项目?

php artisan serve --port=8000
php artisan serve --port=8010 

除了上面的@Daniel Protopopov 答案之外,还有另一种方法,当Site ASite B都是流明时也有效。

简而言之,只需将每侧的DB_DATABASE变量重命名为不同的名称即可。然后在相应的config/<configfilename>.php文件中更改相应的变量名称。

这样在Site A上,您将SITE_A_DB_DATABASE.env并在config/database.php中匹配'database' => env('API_A_DB_DATABASE', 'forge'),行.

然后,由于变量名称不同,您的Site BSITE_B_DB_DATABASE不会被覆盖。

相同的解决方案适用于名称匹配的任何.env变量。

因为命令php artisan config:cache在这里不起作用(路由文件配置文件中需要关闭(

LogicException  : Your configuration files are not serializable.

我用作曲家添加phpdotenv:

composer require vlucas/phpdotenv

在乞求文件"/bootstrap/app.php"(在"new Illuminate\Foundation\Application"之后(,我添加:

$app->detectEnvironment(function () {
$dotenv = DotenvDotenv::create(__DIR__ . '/../', '.env');
$dotenv->overload();
});

也许是另一种选择

如果您使用 GuzzleHttp 从 Laravel 6 应用程序中调用 Lumen 8 API,并且 Laravel env 被继承到 Lumen,创建配置文件对我有用。

在引导程序/应用程序中.php在下面注释以防止从Laravel加载当前环境值

// (new LaravelLumenBootstrapLoadEnvironmentVariables(
//     dirname(__DIR__)
// ))->bootstrap();

在引导程序/应用程序中.php在创建$app后添加以下行。

$app->configure('database');

在流明根文件夹中创建配置/数据库.php。在配置文件的数组中返回 Lumen api 所需的所有 env 值。

<?php
return [
'timezone' => 'UTC',
'default' => 'pdbmysql',
'connections' => [
'pdbmysql' => [
'driver'    => 'mysql',
'host'      => 'localhost',
'port'      => '3306',
'database'  => 'db2',
'username'  => 'root',
'password'  => 'root',
],
],
];

您可以在虚拟主机配置或.htaccess文件中设置环境变量:

SetEnv APP_URL http://b.local

相关内容

最新更新