+ add loadExtension() method.

This commit is contained in:
wangchunsheng
2012-06-07 08:14:46 +00:00
parent 03ebdd0572
commit cd0f77fca8
2 changed files with 39 additions and 35 deletions

View File

@@ -172,49 +172,21 @@ class helper
{
$modelClass = $moduleName . 'Model';
$extModelClass = 'ext' . $modelClass;
$modelLines = "<?php \ninclude '$mainModelFile';\n";
$modelLines = trim(file_get_contents($mainModelFile));
$modelLines = rtrim($modelLines, '?>'); // To make sure the last end tag is removed.
$modelLines .= "class $extModelClass extends $modelClass {\n";
/* Cycle all the extension files. */
$encryptFiles = array();
foreach($extFiles as $extFile)
{
$className = $moduleName . str_replace('.php', '', basename($extFile));
$extLines = trim(file_get_contents($extFile));
if(preg_match('/function +/i', $extLines) == 1)
{
$extLines = trim($extLines);
if(strpos($extLines, '<?php') === 0) $extLines = ltrim($extLines, '<?php');
if(strpos($extLines, '?>') !== false)$extLines = rtrim($extLines, '?\>');
$modelLines .= $extLines . "\n";
}
else
{
$encryptFiles[$className] = $extFile;
}
if(strpos($extLines, '<?php') !== false) $extLines = ltrim($extLines, '<?php');
if(strpos($extLines, '?>') !== false) $extLines = rtrim($extLines, '?>');
$modelLines .= $extLines . "\n";
}
$extClasses = '';
$modelLines .= "\tpublic function __call(\$method, \$params)\n\t{\n";
foreach($encryptFiles as $extClass => $encryptFile)
{
$modelLines .= "\t\tinclude '$encryptFile';\n";
$extClasses .= "'$extClass',";
}
$extClasses = rtrim($extClasses, ',');
$modelLines .=<<<EOD
\$extClasses = array($extClasses);
foreach(\$extClasses as \$extClass)
{
if(method_exists(\$extClass, \$method))
{
\$class = new \$extClass();
return call_user_func_array(array(&\$class, \$method), \$params);
}
}
}
}
EOD;
/* Create the merged model file. */
$modelLines .= "}";
file_put_contents($mergedModelFile, $modelLines);
return $mergedModelFile;

View File

@@ -185,6 +185,38 @@ class model
return $this->$moduleName;
}
/**
* Load extension class of a model. Saved to $moduleName/ext/model/class/$extensionName.class.php.
*
* @param string $extensionName
* @param string $moduleName
* @access public
* @return void
*/
public function loadExtension($extensionName, $moduleName = '')
{
if(empty($extensionName)) return false;
/* Set extenson name and extension file. */
$extensionName = strtolower($extensionName);
$moduleName = $moduleName ? $moduleName : $this->getModuleName();
$extensionFile = $this->app->getModuleExtPath($moduleName, 'model') . 'class/' . $extensionName . '.class.php';
/* Try to import parent model file auto and then import the extension file. */
if(!class_exists($moduleName . 'Model')) helper::import($this->app->getModulePath($moduleName) . 'model.php');
if(!helper::import($extensionFile)) return false;
/* Set the extension class name. */
$extensionClass = $extensionName . ucfirst($moduleName);
if(!class_exists($extensionClass)) return false;
/* Create an instance of the extension class and return it. */
$extensionObject = new $extensionClass;
$extensionClass = str_replace('Model', '', $extensionClass);
$this->$extensionClass = $extensionObject;
return $extensionObject;
}
//-------------------- DAO related method s--------------------//
/**