【问题标题】:yii2: model relations error can't find another class in ubuntu server 16.04yii2: 模型关系错误 can't find another class in ubuntu server 16.04
【发布时间】:2018-05-15 07:04:07
【问题描述】:

我已将我的 YII2 项目上传到 ubuntu 16.04。 我的源在我的计算机上的 localhost 上运行时没有问题,但是当我在带有网络的服务器 ubuntu 16.04 上运行它时,它有问题。 模型源找不到其他关系模型

public function getLokasiAwal()
{
    return $this->hasOne(KotaBandara::className(), ['id_kota' => 'lokasi_awal']);
}

我有错误

找不到类'backend\models\TypeNonstaf'

我找到了解决办法,我添加了以下代码:

use backend\models\Kotabandara;

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

谁能解释一下这个问题?

【问题讨论】:

  • 我猜你的本地主机是 windows?
  • 确保您的文件名与类名的大小写相同。在您的示例中,您有两个版本的模型名称:KotabandaraKotaBandara
  • @Yupik is my localhost is windows
  • @rob006 在windows中区分大小写没问题
  • 因为 Windows 不区分大小写。

标签: yii2 ubuntu-16.04 yii2-active-records


【解决方案1】:

正如@rob006 所指出的,您似乎一直在 Windows 本地文件系统上工作/运行您的应用程序,该文件系统会保留大小写,但 区分大小写 em>。

当你第一次直接或通过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

无论如何,这个路径/字符序列只能有 1 个目标文件。

但是,当您将此代码迁移到同时保留大小写 区分大小写的 Ubuntu 系统时,KotaBandara.phpkotabandara.php 实际上这两个文件可以并排存在,这与 Windows 不同。

所以,你必须在这里准确 - 在 Ubuntu 上,use backend\models\KotaBandara 将触发自动加载器仅查找路径 AND 大小写匹配的文件,即 KotaBandara.php。如果您将文件命名为kotabandara.php,它将在 Windows 上找到,但在 Ubuntu 上找不到!

【讨论】:

    猜你喜欢
    • 2023-02-17
    • 2015-03-23
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2021-06-15
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多