RegisterService('ModelReflection', $oModelReflection ?? new ModelReflectionRuntime()); $this->oCacheService = DataModelDependantCache::GetInstance(); } final public static function GetInstance(ModelReflection $oModelReflection = null): FormBlockService { if (!isset(static::$oInstance)) { static::$oInstance = new FormBlockService($oModelReflection); } return static::$oInstance; } /** * @param string $sId name of the form to retrieve * @param string $sType * * @return \Combodo\iTop\Forms\Block\Base\FormBlock * @throws \Combodo\iTop\Forms\Block\FormBlockException * @throws \Combodo\iTop\Forms\Compiler\FormsCompilerException * @throws \Combodo\iTop\PropertyTree\PropertyTreeException * @throws \DOMFormatException */ public function GetFormBlockById(string $sId, string $sType): FormBlock { $sFilteredId = preg_replace('/[^0-9a-zA-Z_]/', '', $sId); if (strlen($sFilteredId) === 0) { throw new FormBlockException('Malformed name for block: '.json_encode($sId)); } if (!$this->oCacheService->HasEntry(self::CACHE_POOL, $sFilteredId) || utils::IsDevelopmentEnvironment()) { // Cache not found, compile the form $sPHPContent = FormsCompiler::GetInstance()->CompileForm($sFilteredId, $sType); $this->oCacheService->StorePhpContent(FormBlockService::CACHE_POOL, $sId, "oCacheService->Fetch(self::CACHE_POOL, $sFilteredId); $sFormBlockClass = 'FormFor__'.$sFilteredId; return new $sFormBlockClass($sFilteredId); } }