我已将我的YII2项目上传到ubuntu 16.04。 在我的计算机上运行localhost时,我的源代码没有问题,但是当我在服务器ubuntu 16.04上运行它时,它有一个问题。 模型源无法找到另一个关系模型
public function getLokasiAwal()
{
return $this->hasOne(KotaBandara::className(), ['id_kota' => 'lokasi_awal']);
}
我有错误
Class'backend \ models \ TypeNonstaf'not found
我找到了解决方案,我添加了以下代码:
use backend\models\Kotabandara;
在模型文件的顶部,但在我的localhost源代码中, 我不需要添加该代码
有人可以解释这个问题吗?
答案 0 :(得分:1)
正如@ rob006指出的那样,您似乎在Windows本地文件系统上工作/运行您的应用程序,这是保留大小写的,但不 区分大小写
当您第一次直接或通过use
运算符调用命名空间类时,它会将此完整类名称$className
传递给yii\BaseYii\autoload::($className)
(Yii2的全局类自动加载处理程序) ),如果找到,则反过来尝试include
相应的类文件。
因此,在您的Windows本地计算机上,当您使用backend\models\KotaBandara
时,它将以不区分大小写的方式查找并包含与相应路径别名关联的任何文件,因此它将找到以下任何一个:
@backend/models/KotaBandara.php
@backend/models/Kotabandara.php
@backend/models/kotabandara.php
@backend/models/KoTaBaNdArA.php
无论如何,只有一个目标文件具有此序列的路径/字符。
但是,当您将此代码迁移到Ubuntu系统时(保留大小写和 区分大小写),{{1}之间存在明显差异和KotaBandara.php
实际上两个文件可以并排存在,与Windows不同。
所以,你必须准确一点 - 在Ubuntu上,kotabandara.php
将触发自动加载器只查找路径和大小写匹配的文件,即use backend\models\KotaBandara
。如果您将文件命名为KotaBandara.php
,则可以在Windows上找到它,但不能在Ubuntu上找到它!