Code: Select all
/**
* Generates the name for a Dynamic class to be extended from this class
* @param Form $formModel
* @param Language $languageModel
* @param AppVersion $appVersionModel
* @return string
*/
public static function generateSafeDynamicClassNameString($formModel, $languageModel, $appVersionModel) {
return preg_replace('/[^a-zA-Z0-9\']/', '_', $formModel->form_name) .
preg_replace('/[^a-zA-Z0-9\']/', '_', $languageModel->language_name) .
preg_replace('/[^a-zA-Z0-9\']/', '_', $appVersionModel->version_name);
}
/**
* Creates a new class based on the form name, language name and app version version name
* This class is extended from DynamicFormModel
* @param Form $formModel
* @param Language $languageModel
* @param AppVersion $appVersionModel
* @return string the name of the newley created class
*/
public static function createDynamicClass($formModel, $languageModel, $appVersionModel) {
$dynamicClassName = self::generateSafeDynamicClassNameString($formModel, $languageModel, $appVersionModel);
eval('class ' . $dynamicClassName . ' extends DynamicFormModel {}');
return $dynamicClassName;
}
/**
* Creates a new class based on the form name, language name and app version version name
* This class is extended from DynamicFormModel
* @param Form $formModel
* @param Language $languageModel
* @param AppVersion $appVersionModel
* @return *DynamicallyNamedClass* which extends from DynamicFromModel
*/
public static function instantiateDynamicObject($formModel, $languageModel, $appVersionModel) {
if (!$formModel instanceof Form || !$languageModel instanceof Language || !$appVersionModel instanceof AppVersion)
throw new ErrorException('Invalid parameter given');
$dynamicClassName = self::createDynamicClass($formModel, $languageModel, $appVersionModel);
return new $dynamicClassName($formModel, $appVersionModel, $languageModel);
}
Code: Select all
$appVersionModel = AppVersion::model()->findByPk((int) $_POST['appVersionId']);
$formModel = Form::model()->findByPk((int) $_POST['formId']);
$languageModel = Language::model()->findByPk((int) $_POST['languageId']);
$dynamicFormModel = DynamicFormModel::instantiateDynamicObject($formModel, $languageModel, $appVersionModel);
$dynamicClassName = DynamicFormModel::generateSafeDynamicClassNameString($formModel, $languageModel, $appVersionModel);
foreach ($_POST[$dynamicClassName] as $attribute => $value) {
$dynamicFormModel->$attribute = $value;
}