Предложение. Файл модели, помещнный по нестандартному пути заставляет прописывать доп. инфу

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
dasknix
Сообщения: 6
Зарегистрирован: 2015.04.05, 21:57
Откуда: Russia

Предложение. Файл модели, помещнный по нестандартному пути заставляет прописывать доп. инфу

Сообщение dasknix »

Сгенерировал модель. Она упала в папку models. Всё верно. Но у меня для бизнес-процессов выделена подпапка processes.
Затем (чтобы путаницы не было, файлов моделей сущностей домена итак достаточно) переношу файл модели процесса в
models\processes. При ображении к модели, определённой внутри него система кидает Исключение, в случае, если модель ссылается
на другую таблицу (relation), которая в папке на уровень выше.

Ошибка:
Class 'app\models\processes\Item' not found

сама модель процесса ссылается на другую модель, которая на уровень выше в namespace, и, соответственно никаких use'-ов не сгенерировано.

Чем лечится:

надо добавить вначале модели, помещённой в нестандартный отдельный каталог use, указывающий на namespace модели, с которой связана объявляемая модель

Код: Выделить всё

use app\models\Item; 
..на все другие модели, с которыми она связана, чтобы конструкция
    public function rules()
    {
        return [
            [['object_id', 'creator_id'], 'integer'],
            [['process_data'], 'string'],
            [['start_dt'], 'required'],
            [['start_dt', 'modified_dt', 'stop_dt'], 'safe'],
            [['state', 'stage'], 'string', 'max' => 50],
            [['object_id'], 'exist', 'skipOnError' => true, 'targetClass' => Item::className(), 'targetAttribute' => ['object_id' => 'id']],
        ];
    }
..в rules() не вызывала у системы изумления откуда брать класс Item в app\models\processes\

скрин решения с выделенной проблемной часть прилагаю.
в дереве файлов Sublime можно увидеть их организацию в проекте.

Суть предложения:
чтобы relations у модели генерились в Gii либо с возможностью установки custom namespaces для related tables, либо автоматом
полностью прописывались пути прямо с названиями всех моделей, т.е. чтобы выделенный фрагмент выглядел так
public function rules()
{
return [
[['object_id', 'creator_id'], 'integer'],
[['process_data'], 'string'],
[['start_dt'], 'required'],
[['start_dt', 'modified_dt', 'stop_dt'], 'safe'],
[['state', 'stage'], 'string', 'max' => 50],
[['object_id'], 'exist', 'skipOnError' => true, 'targetClass' => \app\models\Item::className(), 'targetAttribute' => ['object_id' => 'id']],
];
}
..либо чтобы в начале файла добавлялись бы разыменовывающие ссылки (если я правильно выражаюсь) на нужные названия моделей в их родном namespace, как это видно на скрине

PS пока писал - обнаружился баг в хайлайтере, как видите, второй раз [ quote ] уже отступы игнорирует
dasknix
Сообщения: 6
Зарегистрирован: 2015.04.05, 21:57
Откуда: Russia

Re: Предложение. Файл модели, помещнный по нестандартному пути заставляет прописывать доп. инфу

Сообщение dasknix »

Изображение
Изображение
на самом деле добавить к первому посту нечего, там досконально всё описано, но, вероятно понять со стороны можно не сразу.

суть в том, что Item у нас в app\models, и в namespace модели моего процесса (app\models\processes\) Item никогда не будет виден,
(скрин) если мы просто укажем его имя (именно имя, т.н. class short name, без namespace-части).

..поэтому надо добавить в начало файла модели use, либо указать в качестве имени related-модели full qualified name (с полным
namespace), и если это будет делать генератор - это будет невероятно здорово, т.к. по сути он создан для облегчения задач. а
сейчас пока приходится руками править каждый файл
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Предложение. Файл модели, помещнный по нестандартному пути заставляет прописывать доп. инфу

Сообщение zelenin »

классы создаются в одном неймспейсе, и в одном неймспейсе не надо писать use для импорта класса. Если вы переносите свой класс в другой неймспейс, то сами ручками исправляйте его отношения с другими классами - gii не должен предугадывать возможность переноса, делая модель более многословною.
Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Re: Предложение. Файл модели, помещнный по нестандартному пути заставляет прописывать доп. инфу

Сообщение mitaichik »

Переносить надо правильно: Refactor -> Move. Тогда PhpStorm сам подправит/добавит все необходимое.
А так - это точно не проблема фреймворка.
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Предложение. Файл модели, помещнный по нестандартному пути заставляет прописывать доп. инфу

Сообщение Йож »

если модели, которые используются внутри данной, имеют другое расположение - то используйте для каждой use вначале кода, либо полный ее путь при использовании.
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Предложение. Файл модели, помещнный по нестандартному пути заставляет прописывать доп. инфу

Сообщение Йож »

как gii поймет, что у вас реляционная модель не в том же неймспейсе? логично, что они в одном должны быть
Ответить