diff --git a/src/Lib/default/meta_fields_types/IPv4Type.php b/src/Lib/default/meta_fields_types/IPv4Type.php index 7705064..c25acd7 100644 --- a/src/Lib/default/meta_fields_types/IPv4Type.php +++ b/src/Lib/default/meta_fields_types/IPv4Type.php @@ -65,7 +65,8 @@ class IPv4Type extends TextType protected function fetchAllMetatemplateFieldsIdForThisType(\App\Model\Entity\MetaTemplateField $metaTemplateField = null): Query { - $conditions =[]; + $this->MetaTemplateFields = TableRegistry::getTableLocator()->get('MetaTemplateFields'); + $conditions = []; if (!is_null($metaTemplateField)) { $conditions['id'] = $metaTemplateField->id; } else { diff --git a/src/Lib/default/meta_fields_types/TextType.php b/src/Lib/default/meta_fields_types/TextType.php index 900a4a5..1a69f6b 100644 --- a/src/Lib/default/meta_fields_types/TextType.php +++ b/src/Lib/default/meta_fields_types/TextType.php @@ -12,7 +12,6 @@ class TextType public function __construct() { $this->MetaFields = TableRegistry::getTableLocator()->get('MetaFields'); - $this->MetaTemplateFields = TableRegistry::getTableLocator()->get('MetaTemplateFields'); } public function validate(string $value): bool diff --git a/src/Model/Behavior/MetaFieldsBehavior.php b/src/Model/Behavior/MetaFieldsBehavior.php index aedbf28..31bb748 100644 --- a/src/Model/Behavior/MetaFieldsBehavior.php +++ b/src/Model/Behavior/MetaFieldsBehavior.php @@ -55,20 +55,15 @@ class MetaFieldsBehavior extends Behavior public function initialize(array $config): void { $this->bindAssociations(); - $this->_metaTemplateFieldTable = $this->_table; - $this->_metaTemplateTable = $this->_table; + $this->_metaTemplateFieldTable = $this->_table->MetaFields->MetaTemplateFields; + $this->_metaTemplateTable = $this->_table->MetaFields->MetaTemplates; $this->loadTypeHandlers(); } private function loadTypeHandlers() { - $typeHandlers = [ - new TextType(), - new IPv4Type(), - new IPv6Type(), - ]; - foreach ($typeHandlers as $handler) { - $this->typeHandlers[$handler::TYPE] = $handler; + if (empty($this->typeHandlers)) { + $this->typeHandlers = $this->_metaTemplateFieldTable->getTypeHandlers(); } } @@ -238,8 +233,7 @@ class MetaFieldsBehavior extends Behavior protected function buildQuerySnippet(array $filter): Query { - $this->MetaTemplateFields = TableRegistry::getTableLocator()->get('MetaTemplateFields'); - $metaTemplateField = !empty($filter['meta_template_field_id']) ? $this->MetaTemplateFields->get($filter['meta_template_field_id']) : null; + $metaTemplateField = !empty($filter['meta_template_field_id']) ? $this->_metaTemplateFieldTable->get($filter['meta_template_field_id']) : null; $whereClosure = function (QueryExpression $exp) use ($filter, $metaTemplateField) { foreach ($filter as $column => $value) { $keyedColumn = 'MetaFields.' . $column; diff --git a/src/Model/Table/MetaTemplateFieldsTable.php b/src/Model/Table/MetaTemplateFieldsTable.php index 39d0565..f58d4f5 100644 --- a/src/Model/Table/MetaTemplateFieldsTable.php +++ b/src/Model/Table/MetaTemplateFieldsTable.php @@ -6,8 +6,14 @@ use App\Model\Table\AppTable; use Cake\ORM\Table; use Cake\Validation\Validator; +use MetaFieldsTypes\TextType; +use MetaFieldsTypes\IPv4Type; +use MetaFieldsTypes\IPv6Type; + class MetaTemplateFieldsTable extends AppTable { + private $typeHandlers = []; + public function initialize(array $config): void { parent::initialize($config); @@ -18,6 +24,7 @@ class MetaTemplateFieldsTable extends AppTable $this->hasMany('MetaFields'); $this->setDisplayField('field'); + $this->loadTypeHandlers(); } public function beforeSave($event, $entity, $options) @@ -37,4 +44,28 @@ class MetaTemplateFieldsTable extends AppTable ->requirePresence(['field', 'type'], 'create'); return $validator; } + + public function loadTypeHandlers(): void + { + if (empty($this->typeHandlers)) { + $typeHandlers = [ + new TextType(), + new IPv4Type(), + new IPv6Type(), + ]; + foreach ($typeHandlers as $handler) { + $this->typeHandlers[$handler::TYPE] = $handler; + } + } + } + + public function getTypeHandlers(): array + { + return $this->typeHandlers; + } + + public function getTypeHandler($type) + { + return $this->typeHandlers[$type] ?? false; + } }