<?php namespace Webfan; trait ngModuleTrait { protected $_blocks = []; abstract public function getName(): string; public function __invoke(\callable|\Closure $BlocksProcessor, ?string $name = null) { $n = $name ? explode('.', $name, 2) : [$name,$name]; $n[1] = isset($n[1]) ? $n[1] : $name; list($groupName, $controllerName) = $n; $groupName = '*' === $groupName ? null : $groupName; $controllerName = '*' === $controllerName ? null : $controllerName; foreach($this->_blocks as $type => $group){ foreach($group as $id => $block){ if(null === $name || null === $groupName || $type === $groupName || $type === $name || $type === $controllerName){ if(null === $name || null === $controllerName || $id === $controllerName || $id === $name || $id === $groupName){ // array_push($blocks, $block); \call_user_func_array($BlocksProcessor->bindTo($block, $this), [$block, $type, $id, $this]); } } } } //return \call_user_func_array($BlocksProcessor, [$this->getName(), $this, $this->_blocks]); } public function __call($method, $params) { $args = $params; $block = new \stdclass; $block->type = $method; if(!isset($this->_blocks[$block->type])){ $this->_blocks[$block->type] = []; } if(isset($args[0]) && is_string($args[0])){ $block->name = array_shift($args); }else{ $block->name = ucfirst($block->type).'Block'.(count($this->_blocks[$block->type]) + 1).'RandId'.mt_rand(10000,99999999); } if(isset($args[0]) && \is_callable($args[0])){ $block->controller = array_shift($args); $block->inject = $args; }elseif(isset($args[0]) && is_array($args[0])){ $injector = array_shift($args); if(\is_callable($injector[count($injector)-1])){ $block->controller = array_pop($injector); } $block->inject = $injector; }else{ $block->inject = $args; } if(!isset($block->controller)){ $block->controller = (function($args) use(&$block){ return $block; }); } $block->controller = $block->controller->bindTo($block, $this); if(isset($this->_blocks[$block->type][$block->name])){ throw new \Exception('A %1$s block with the name %2$s does exist already in %3$s!', $block->type, $block->name, __METHOD__); } $this->_blocks[$block->type][$block->name] = $block; return $this; } } __halt_compiler();----SIGNATURE:----kgPJGwMpFaaXRA+UNHXB9f0xOpu38qzy15gPCoBT5CxwCZFqSoDih3foYgmC9SioBXVq9blIHf1MkDGGTO6hwY/RezrrgNMx9W+aNUZz1VEamkBR1okmqtpHWz46Q6Z7S5oC2szSMHwlTTjUcGJj1d8yInY7W6HgB+qMqa6mgS4rIjRhmebKbgcRyZVNukh6pizVkl6dh75HyZIAcs8It0LZHRNTPMFh6tvG67VC0TlclXT180vk3vRV+1A2cp3Cla2adquiL525j7Lp0fHWUYCYDJBNsIOqSsAoNHlRVwcy/4pEsUVfPZFonsKopl1SODDvifPbKxgyu/a482RRhn9r3l6layY312cb6J5D7vSp16DmjVOamomDf8piaUX0M+YLbrqUvgxxHnoV62/LhHPgMPcM3ar64jlXP7vLfP6uqd2VKLtNMp+wPIXT5023O5IH4/FDyXIk5iZZEHMDsYwJTu24bPAGbnFXkVTjiNlZ0wUtxUV/JmynQKDmuT1nQCRKL9pdUVQkeBCNPiE7AtEwjqYs1RhciLtPNG9B0sKxrnyICjEkHXucadsGPEof6aqS35I1uVwL9IWDwASqzlV8qD0myt2aGcdE1il2zcQGJl8DGl6dyvlsI27zZ1HGg4Jop87EmlxDsuCuewhbIB/KdbLDczZoMzJXk4liMmI=----ATTACHMENT:----MTM1MDg4NDgyNzU5NzUwOCAyNTgyMTY4ODIzMTg5NDQgNjMxNTg3MzQ4MzcyMTI4NQ==