【问题标题】:Environment variables not working in Phalcon Config环境变量在 Phalcon Config 中不起作用
【发布时间】:2015-09-05 17:48:48
【问题描述】:

我有一个添加了这个库的 Phalcon 项目:https://github.com/vlucas/phpdotenv。该库旨在从 .env 文件加载一些环境变量。我创建了这样一个文件并将其放入我的项目中。

VERSION_NUMBER=3.14 

DATABASE_HOST=localhost
DATABASE_NAME=test
DATABASE_USER=root
DATABASE_PASS=root

我将我的loader.php 文件重写为以下代码:

<?php
$loader = new \Phalcon\Loader();

/**
 * We're a registering a set of directories taken from the configuration file
 */
$loader->registerNamespaces(array(
    'Test\Models' => $config->application->modelsDir,
    'Test\Controllers' => $config->application->controllersDir,
    'Test\Forms' => $config->application->formsDir,
    'Test\Classes' => $config->application->classesDir,
    'Test\Classes\Excel' => $config->application->excelDir,
    'Test' => $config->application->libraryDir
));

$loader->register();

// Use composer autoloader to load vendor classes
require_once __DIR__ . '/../../vendor/autoload.php';

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->required(['DATABASE_HOST', 'DATABASE_NAME', 'DATABASE_USER', 'DATABASE_PASS']);
$dotenv->overload();

在我的配置文件中,我用环境变量替换了键:

'database' => array(
    'adapter'  => 'Mysql',
    'host'     => getenv('DATABASE_HOST'),
    'username' => getenv('DATABASE_USER'),
    'password' => getenv('DATABASE_PASS'),
    'dbname'   => getenv('DATABASE_NAME')
),

我可以在我想要的地方回显getenv('VERSION_NUMBER'),并且每次都可以使用,但是当我尝试使用此配置文件时,变量为空。我做错了什么?

【问题讨论】:

  • 为什么不在config.php中检测当前url并在那里定义规则?我有点怀疑(如果有人可以访问脚本,他也必须访问 .env 文件),我的看法
  • 因为我喜欢能够设置全局变量的想法,并且因为我们有很多不同的客户端和 URL,所以我认为这是更清洁的解决方案。我不这样做是因为所谓的“增加安全性”。

标签: php phalcon


【解决方案1】:

从您提供的源代码摘录来看,它没有理由不工作。我只能做假设,但由于我目前正在开发一个使用 Dotenv 的项目,所以我想指出两种可能性。

首先,我不确定您为什么使用overload() 方法。像这样在public/index.php 中加载 Dotenv 就足够了:

define('APP_PATH', realpath('..'));
include APP_PATH . '/vendor/autoload.php';

$dotenv = new Dotenv\Dotenv(APP_PATH);
$dotenv->load();

这让我想到了问题的第二个也是最可能的根源:

您正在 loader.php 文件中加载 Dotenv。在大多数 Phalcon 示例项目中,该项目是在配置之后加载的,因此您的 Env 变量此时尚未设置。包括我在你的index.php 中提到的代码,你应该很好。

【讨论】:

    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2021-11-13
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多