Կոնֆիգուրացիոն օբյեկտի կախվածություններ
Կոնֆիգուրացիոն օբյեկտները կարող են հայտարարել իրենց կախվածությունները։ Կախվածությունը կարող է լինել մոդուլ, թեմա կամ էնթիթի։
Կոնֆիգուրացիոն օբյեկտի կախվածությունները պետք է լինեն տեղադրված մինչև կոնֆիգուրացիոն օբյեկտի տեղադրումը։ Եթե կախվածությունները բացակայում են կամ չլինեն տեղադրված կայքում, ապա կոնֆիգուրացիոն օբյեկտի տեղադրումը կթերի։ Մոդուլը պետք է իր info YAML ֆայլում հայտարարի այդ մոդուլի և թեմաների կախվածությունները, որոնք անհրաժեշտ կլինեն իր կոնֆիգուրացիոն օբյեկտներին։
Ինքնին՝ մոդուլների ծրագրավորողներին սովորաբար չի պահանջվում կախվածություններ հայտարարել կոնֆիգուրացիոն օբյեկտների համար։ Կորնի կոնֆիգուրացիոն էնթիթների բազային դասերը ընդլայնելով և օգտագործելով API-ի ստանդարտ պլագինների մատակարարներից ստացված պլագինները՝ կախվածությունները հաշվարկվում և հայտարարվում են ավտոմատ։
Ակնարկ
Կոնֆիգուրացիոն օբյեկտի կախվածությունները հայտարարվում են config_dependencies բանալիով կոնֆիգուրացիոն օբյեկտի սահմանման մեջ։ Այս զանգվածի բանալիները կարող են լինել հետևյալները․
- content
- config
- module
- theme
Կոնֆիգուրացիոն օբյեկտները իրենց կախվածությունները սահմանում են \Drupal\Core\Config\Entity\ConfigEntityInterface::calculateDependencies() մեթոդով։ Այս մեթոդը պետք է կանչվի կոնֆիգուրացիոն օբյեկտի \Drupal\Core\Entity\EntityInterface::preSave() իրականացման մեջ։ Իրականացումները պետք է օգտագործեն \Drupal\Core\Config\Entity\ConfigEntityBase::addDependency() օգնության մեթոդը կախվածությունները ավելացնելու համար։ Կորնի բոլոր իրականացումները կանչում են ծնողական \Drupal\Core\Config\Entity\ConfigEntityBase::calcDependencies() մեթոդը, որը զրոյացնում է կախվածությունները և տրամադրում է իրականացում՝ պլագինների մատակարար մոդուլները գտնելու համար, եթե կոնֆիգուրացիոն օբյեկտը իրականացնում է \Drupal\Core\Entity\EntityWithPluginCollectionInterface-ը։
Լրացուցիչ տեղեկությունների համար դիտեք Կոնֆիգուրացիոն կախվածությունների կառավարիչի API փաստաթուղթը՝ այս դասերի և մեթոդների վերաբերյալ։
Ինչպես հաշվարկվում են կոնֆիգուրացիոն կախվածությունները
Կախվածությունների հաշվարկը կոնֆիգուրացիոն օբյեկտի հատկությունների հիման վրա
@todo - դիտեք \Drupal\block\Entity\Block::calculateDependencies
Կախվածությունների հաշվարկը հիմնված մյուս կոնֆիգուրացիոն օբյեկտների վրա
@todo - դիտեք \Drupal\entity\EntityDisplayBase::calculateDependencies (սա շատ բարդ օրինակ է)
Կախվածությունների հաշվարկը պլագինների և դրանց հետագա դասավորությունների համար
@todo դիտեք Drupal\Core\Config\Entity\ConfigEntityBase::calculateDependencies - նշեք, որ եթե կոնֆիգ obj-ը իրականացնում է EntityWithPluginBagInterface, ապա ավտոմատ ավելացվում է կախվածություն պլագինը տրամադրող մոդուլից։
Անօթար պլագինների օրինակները վերցվում են բազային պլագինից։ Օրինակ՝ \Drupal\system\Plugin\Derivative\SystemMenuBlock-ը պլագինի անօթարն է՝ \Drupal\system\Plugin\Block\SystemMenuBlock։ Սիստեմային մենյուի բլոկները պահանջում են, որ լինի կախվածության կապ բլոկի մոդուլի կոնֆիգուրացիոն օբյեկտի և մենյուի կոնֆիգուրացիոն օբյեկտի միջև, որը տրամադրվում է բլոկի միջոցով։
\Drupal\system\Plugin\Block\SystemMenuBlock դասը իրականացնում է getDerivativeDefinitions() մեթոդը։ Արդյունքում՝ Bartik-ի ֆուտերի նման մենյուի բլոկի անօթար բլոկները կախված կլինեն համապատասխան \Drupal\system\Entity\Menu էնթիթից։
public function getDerivativeDefinitions($base_plugin_definition) { foreach ($this->menuStorage->loadMultiple() as $menu => $entity) { $this->derivatives[$menu] = $base_plugin_definition; $this->derivatives[$menu]['admin_label'] = $entity->label(); $this->derivatives[$menu]['config_dependencies']['config'] = array($entity->getConfigDependencyName()); } return $this->derivatives; }
Վերը նշված կոդում յուրաքանչյուր անօթար սիստեմային մենյու բլոկ ստանում է կոնֆիգուրացիոն կախվածություն բլոկ մենյուի տրամադրող օբյեկտից։ Կոնֆիգուրացիայի կախվածության անունը ստացվում է getConfigDependencyName() մեթոդով։ Օբյեկտի անունը կազմված է և չպետք է կոշտ կոդավորվի այնտեղ, որտեղ հայտարարվում է կախվածությունը։
config_dependencies հատկությունը կարող է հայտարարվել նաև որպես պլագինի սահմանման մաս։ Սակայն կոնֆիգուրացիոն օբյեկտների կախվածությունները հիմնականում դինամիկ են և հաշվարկվում են։ Պլագինի սահմանման մեջ ստատիկ կախվածությունների հայտարարումը հազվադեպ է և պետք է խուսափել դրանից։
Անհրաժեշտ կախվածություններ
@todo - դիտեք https://www.drupal.org/node/2404447։
Կարգավորման արտահանման և ներմուծման մասին լրացուցիչ տեղեկությունների համար դիտեք Կոնֆիգուրացիայի կառավարում Drupal 8-ում։
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.