Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
инвентаризация:dev:model:fields [2024/05/25 08:40]
admin
инвентаризация:dev:model:fields [2025/05/20 08:03] (текущий)
admin
Строка 1: Строка 1:
-{{tag>dev Инвентаризация}} +{{tag>dev Инвентаризация model fields}} 
-====== Инвентаризация: model:fields ======+====== Инвентаризация: DEVModel Fields ======
  
 Описание атрибутов модели делаем в одной функции: Описание атрибутов модели делаем в одной функции:
 <code php> <code php>
-public $parentAttr='parentService'; //имя атрибута в котором у нас объект-предок (родительское помещение/сервис/отдел и т.д.) +    /** @var string как называется один экземпляр модели (для страницы Create -> Новый объект) */ 
-public function attributeData() { +    public static $title='Объект'; 
-    return [ +  
-        ['model_id'] => [ +    /** @var string как называется список моделей (для страницы Index) */ 
-            'label'=>'Модель ПК',  //позже транслируется в attributeLabels, используется в отображении атрибута в формах +    public static $titles='Объекты'; 
-            'hint'=>'Модель системного блока ноутбука. ' //позже транслируется в attributeHints, используется для пояснения атрибута в формах +  
-                   .'Если нужная модель отсутствует в списке, то нужно сначала завести в ее в соотв. категории оборудования',   +    /** @var string надпись на кнопке создания нового объекта в списке */ 
-            'indexLabel'=>'Модель ПК',  //позже транслируется в attributeIndexLabels, используется в отображении атрибута в списках +    public static $addButtonText='Добавить'; 
-            'indexHint'=>'Модели можно перечислить варианты через верт. черту &quot;|&quot;',  //позже транслируется в attributeIndexHints, используется для пояснения атрибута в списках +  
-            'is_inheritable'=>true,  //поле наследуемое (если не задано в этом объекте, то значение берется из родителя) +    /** @var null|string подсказка для кнопки создания нового объекта */ 
-            'placeholder' => 'Модель ПК не выбрана',  //чем заполнить селектор в форме, если значение не введено +    public static $addButtonHint=null; 
-        ], +  
-        'model'=>['alias'=>'model_id'], //значения параметров атрибута брать из model_id +    /** @var string Префикс для страницы Create (Новый $title) */ 
-    ] +    public static $newItemPrefix='Новый';
-}+
  
- /** +    public $parentAttr='parentService'; //имя атрибута в котором у нас объект-предок (родительское помещение/сервис/отдел и т.д.) - нужен для рекурсивных функций обхода дерева 
-  * @return array[] Ссылками на объекты каких классов являются атрибуты +    public function attributeData() { 
-  * $linksSchema=[ +        return [ 
-  * 'services_ids'=>+            ['model_id'] => [ 
-  * Service::class, //на какой класс ссылаемся +                //позже транслируется в attributeLabels, используется в отображении атрибута в формах 
-  * 'acls_ids', //если там есть обратная ссылка, то в каком аттрибуте +                'label'=>'Модель ПК',   
-   ], +                //позже транслируется в attributeHints, используется для пояснения атрибута в формах 
- * 'user_id'=>[ +                'hint'=>'Модель системного блока / ноутбука. '  
- * Users::class, +                       .'Если нужная модель отсутствует в списке, то нужно сначала завести в ее в соотв. категории оборудования',   
-  * 'loader'=>'user' //как загрузчик этого объекта называется в мастер-классе +                //позже транслируется в attributeIndexLabels, используется в отображении атрибута в списках 
-  * ], +                'indexLabel'=>'Модель ПК',   
-  * ]; +                //позже транслируется в attributeIndexHints, используется для пояснения атрибута в списках 
-  */ +                'indexHint'=>'Модели можно перечислить варианты через верт. черту &quot;|&quot;',   
- public $linksSchema=[ +                //тип Input этого аттрибута в форме редактирования 
- 'depends_ids' => [Services::class,'dependants_ids'], +                //  - boolean - да / нет (чекбокс) 
- 'comps_ids' => [Comps::class,'services_ids'], +                //  - toggle - это как boolean, но только для 0 и 1 есть свои названия, напр сервис/услуга 
- 'techs_ids' => [Techs::class,'services_ids'], +                //  - radios - это как toggle, только значений может быть больше 2 
- 'maintenance_reqs_ids'=> [MaintenanceReqs::class,'services_ids'], +                //  - list - это как radios, только значений прям много и оформляется в виде dropdown 
- 'maintenance_jobs_ids'=> [MaintenanceJobs::class,'services_ids'], +                //  - ntext - textarea (простой текст без форматирования с конвертацией nl -> <br> при рендере) 
- 'support_ids' => [Users::class,'support_services_ids','loader'=>'support'], +                //  - text - текст с форматированием (какой формат прописывается в параметрах) 
- 'infrastructure_support_ids' => [Users::class,'infrastructure_support_services_ids','loader'=>'infrastructureSupport'], +                //  - date - дата 
- 'contracts_ids' =>  [Contracts::class,'services_ids'], +                //  - datetime - дата/время 
- 'acls_ids' =>  [Acls::class,'services_id'],+                //  - ips - список IP 
 +                //  - macs - список MAC 
 +                //  - urls - список URL  
 +                //  - link - одиночная ссылка 
 +                //  - string - обычный текст (по умолчанию) 
 +                'fieldType' => 'text', 
 +                //чем заполнить селектор в форме, если значение не введено 
 +                'placeholder' => 'Модель ПК не выбрана',   
 +                //поле наследуемое (если не задано в этом объекте, то значение берется из родителя) 
 +                'is_inheritable'=>true, 
 +                //поле является ссылкой на объекты с обратной ссылкой на этот.  
 +                //при наличии объектов в этом поле, считаем что себя удалять нельзя,  
 +                //иначе в объектах ссылающихся на нас будут битые ссылки 
 +                //(если не объявлять явно, определяется из $linkSchema) 
 +                'is_reverseLink'=false, 
 +                //при вызове функции absorb это поле нужно поглощать из переданного объекта 
 +                // - false - нет (по умолчанию для полей - "не обратных ссылок" 
 +                // - 'ifEmpty' - если локальное значение отсутствует, то принимать с абсорбируемого объекта 
 +                // - true - да (по умолчанию для полей, являющихся обратными ссылками) 
 +                'absorb'=>true, 
 +                //что нужно заджойнить при отображении этого атрибута в списке (для жадной загрузки + поиск) 
 +                'join'=>['techModel','techType'
 +            ], 
 +            'model'=>['alias'=>'model_id'], //значения параметров атрибута брать из model_id 
 +        ] 
 +    } 
 + 
 +    /** 
 +     * @return array[] Ссылками на объекты каких классов являются атрибуты 
 +     * $linksSchema=[ 
 +     * 'services_ids'=>
 +     * Service::class, //на какой класс ссылаемся 
 +     * 'acls_ids', //если там есть обратная ссылка, то в каком аттрибуте 
 +                      'updater' => ['class' => ManyToManySmartUpdater::class,], //Если запись в many-2-many таблицу делается кастомным способом 
 +     *                                          //Передается в behaviors() 
 +                                              //https://github.com/voskobovich/yii2-linker-behavior?tab=readme-ov-file#custom-junction-table-values 
 +     * 'loader'=>'servicesList',//как загрузчик этого объекта называется, если он не формируется автоматически из названия ссылки 
 +     * 'deleteable'=>true,     //можно ли удалять объект с такими ссылками (если ссылки удаляются в beforeDelete) 
 +     * ], 
 +     * ]; 
 +     */ 
 +    public $linksSchema=[ 
 +        'depends_ids' =>                [Services::class,'dependants_ids'], 
 +        'comps_ids' =>                  [Comps::class,'services_ids'], 
 +        'techs_ids' =>                  [Techs::class,'services_ids'], 
 +        'maintenance_reqs_ids'=>        [MaintenanceReqs::class,'services_ids'], 
 +        'maintenance_jobs_ids'=>        [MaintenanceJobs::class,'services_ids'], 
 +        'support_ids' =>                [Users::class,'support_services_ids','loader'=>'support'], 
 +        'infrastructure_support_ids' => [Users::class,'infrastructure_support_services_ids','loader'=>'infrastructureSupport'], 
 +        'contracts_ids' =>              [Contracts::class,'services_ids'], 
 +        'acls_ids' =>                   [Acls::class,'services_id'],
   
- 'responsible_id' => [Users::class,'services_ids'], +        'responsible_id' =>             [Users::class,'services_ids'], 
- 'infrastructure_user_id' => [Users::class,'infrastructure_services_ids','loader'=>'infrastructureResponsible'], +        'infrastructure_user_id' =>     [Users::class,'infrastructure_services_ids','loader'=>'infrastructureResponsible'], 
- 'providing_schedule_id' => [Schedules::class,'providing_services_ids'], +        'providing_schedule_id' =>      [Schedules::class,'providing_services_ids'], 
- 'support_schedule_id' => [Schedules::class,'support_services_ids'], +        'support_schedule_id' =>        [Schedules::class,'support_services_ids'], 
- 'segment_id' => [Segments::class,'services_ids'], +        'segment_id' =>                 [Segments::class,'services_ids'], 
- 'parent_id' => [Services::class,'children_ids','loader'=>'parentService'], +        'parent_id' =>                  [Services::class,'children_ids','loader'=>'parentService'], 
- 'partners_id' => [Partners::class,'services_ids'], +        'partners_id' =>                [Partners::class,'services_ids'], 
- 'places_id' => [Places::class,'services_ids'], +        'places_id' =>                  [Places::class,'services_ids'], 
- 'currency_id' => Currency::class, +        'currency_id' =>                Currency::class, 
- ];+    ];
  
     /**     /**
  • инвентаризация/dev/model/fields.1716626417.txt.gz
  • Последнее изменение: 2024/05/25 08:40
  • admin