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