yii2: ошибка отношений модели не может найти другой класс на сервере Ubuntu 16.04 - PullRequest
0 голосов
/ 15 мая 2018

Я загрузил свой проект YII2 в Ubuntu 16.04.Мой источник не проблема при запуске на локальном хосте на моем компьютере, но когда я запускаю его на сервере Ubuntu 16.04 с сетью, это проблема.Источник модели не может найти другую модель отношения

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

, и у меня есть ошибка

Класс 'backend \ models \ TypeNonstaf' не найден

Я нашел решение, я добавил следующий код:

use backend\models\Kotabandara;

Наверху в файле модели, но в моем источнике на localhost мне не нужно добавлять этот код

Можеткто-то объяснит эту проблему ??

1 Ответ

0 голосов
/ 16 мая 2018

Как указал @ 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

В любом случае может быть только 1 целевой файл с этой последовательностью путей / символов.

Однако, когда вы переносите этот код в систему Ubuntu, которая учитывает регистр и с учетом регистра , между KotaBandara.php и * 1037 будет определенная разница * и фактически оба файла могут существовать бок о бок, в отличие от Windows.

Итак, вам нужно быть точным здесь - в Ubuntu, use backend\models\KotaBandara вызовет автозагрузчик, чтобы найти только файл, путь и регистр которого совпадают, т.е. KotaBandara.php. Если вы назвали файл kotabandara.php, он будет найден в Windows, но не в Ubuntu!

...