yii2:模型关系错误在 ubuntu 服务器 16.04 中找不到另一个 class

yii2: model relations error can't find another class in ubuntu server 16.04

我已经将我的 YII2 项目上传到 ubuntu 16.04。 当我的计算机上的本地主机上 运行 时,我的源没有问题,但是当我 运行 它在服务器 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;

在模型文件中位于顶部,但在本地主机的源代码中, 我不需要添加该代码

谁能解释一下这个问题??

正如@rob006 所指出的,您的应用程序似乎是 working/running 在 Windows 本地文件系统上,这是大小写保留的,但 不是 区分大小写.

当您第一次直接或通过 use 运算符调用命名空间 class 时,它会将这个完整的 class 名称作为 $className 传递给 yii\BaseYii\autoload::($className) (Yii2 的全局 class 自动加载处理程序),如果找到,它会依次尝试 include 相应的 class 文件。

因此,在您的 Windows 本地计算机上,当您使用 backend\models\KotaBandara 时,它会以不区分大小写的方式查找并包含与相应路径别名关联的任何文件,因此它会找到任何一个:

  • @backend/models/KotaBandara.php
  • @backend/models/Kotabandara.php
  • @backend/models/kotabandara.php
  • @backend/models/KoTaBaNdArA.php

无论如何只能有 1 个目标文件具有此 paths/characters 序列。

但是,当您将此代码迁移到 Ubuntu 系统时,该系统既保留大小写 区分大小写, KotaBandara.phpkotabandara.php 之间有明显的区别,事实上这两个文件可以并存,不像 Windows.

因此,您必须在此处精确 - 在 Ubuntu 上,use backend\models\KotaBandara 将触发自动加载器仅查找路径和大小写匹配的文件,即 KotaBandara.php。如果您将文件命名为 kotabandara.php,它将在 Windows 上找到,但不会在 Ubuntu!

上找到