我有一个配置文件,它是一个名为config.php的php数组。
return array(
'template_dir' => __DIR__ '/configs/templates.php'
)
然后每当我想使用这个配置文件时,我都会包含config.php。以这种方式编写配置文件也很容易。
file_put_contents($config, 'return ' . var_export($data, true));
但我希望能够将魔术常量 DIR 写入配置文件而不进行扩展。到目前为止,我还没有想出办法来做到这一点。我已经尝试了一切来编写recursiveArrayReplace方法来删除整个路径并尝试用
替换它 __DIR__
但总是出现
'__DIR__ . /configs/template.php'
在这种情况下,当它运行时不会扩展。
我该怎么写
__DIR__ to an array in a file or how ever else without the quotes so that it looks like,
array('template_dir' => __DIR__ . '/configs/templates.php');
答案 0 :(得分:1)
您需要替换起始撇号,而不是用__DIR__
替换路径。
E.g。如果路径是/foo/bar
,那么你想要做这个替换:
"'/foo/bar"
至"__DIR__ . '"
在:
'/foo/bar/configs/template.php'
后:
__DIR__ . '/configs/template.php'
答案 1 :(得分:1)
这是不可能的,因为var_export()
打印变量,而不是表达式。
最好将所有路径编写为相对目录,并在获取数据后规范化为完整的工作路径。
您还可以考虑返回一个对象:
class Config
{
private $paths = array(
'image_path' => '/configs/template.php',
);
public function __get($key)
{
return __DIR__ . $this->paths[$key];
}
}
return new Config;
或者,您必须自己生成PHP代码。
答案 2 :(得分:0)
如何通过以下方式直接编写配置:
$data = <<<EOT
return array('template_dir' => __DIR__ . '/configs/templates.php');
EOT;
file_put_contents($config, $data);