Yii2在主动应用程序目录树之外寻址命名空间没有问题。然而,我想使用require_once语句从前端和后端Yii2高级模板应用程序实例都可以共享的位置获取一个只包含常量的文件(即,一长串define(CONSTANT,value)语句)。
现在我正在使用:
require_once '....commonconfigkeywords.php';
但当我将我的应用程序从我工作的Windows开发环境迁移到它在生产中运行的Linux环境时,这会失败,可能是因为相对寻址前缀('..\..\')不是Linux可以解释的(?)。
理想情况下,我想要一个使用别名或在某种程度上不依赖于相对或绝对路径的解决方案。但是,当文件位于下时,可以将其包括在内,基本应用程序路径为:
require_once Yii::$app->basePath.'configkeywords.php';
它仍然没有给我一种从比应用程序基本路径高的起点寻址目录的方法。
这似乎是任何试图使用常量共享文件的人都会遇到的常见问题。专家是如何解决的?我是不是错过了一个更优雅的方法?
1)如果您想显式使用目录路径:
Windows同时理解/
和斜杠,而Linux和其他操作系统则理解
/
。在构建路径时请记住这一点。因此,请改用/
。
有时,使用特殊的预定义PHP常量DIRECTORY_SEPARATOR
更为灵活。将它与文件夹名称连接起来,就可以获得独立于平台的路径。
2)其他选项是避免显式使用路径。使用方法创建组件(helper类,例如ConstantsSetter
),完成您需要的所有工作,向其添加命名空间(例如commoncomponents
),然后在应用程序引导期间执行它。您可以直接将调用添加到bootstrap.php
文件(请参阅此相关答案)或使用yii\base\BoostrapInterface。