You are viewing revision #5 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.
How to implement directory independent extensions ¶
Many people want to use downloaded extensions in their own way. As for me most of the extensions require me to correct Yii::import()
instructions inside their source code. All these extensions are directory dependent. To avoid the situation described above, I suggest to implement pseudo-anonymous aliases:
// take the current extension path
$dir = dirname(__FILE__);
// generate alias name
$alias = md5($dir);
// create alias
Yii::setPathOfAlias($alias,$dir);
// import other classes
Yii::import($alias.'.anotherClass');
Yii::import($alias.'.andAnoTherClass');
//...
//if you want, you can destroy an alias created
Yii::setPathOfAlias($alias,'');
Using this technique you can create really directory-independent extensions.
Include in Yii core
Brilliant!!
Perhaps Yii::import could be modified to include this feature
Something like
public static function import($alias,$forceInclude=false,$baseDir='') { if($baseDir) $alias=md5($dir).".$alias"; // Current Yii::import code }
then extensions can import with
Yii::import('Class',false,dirname(__FILE__));
Correct code
Dohhh!!
public static function import($alias,$forceInclude=false,$baseDir='') { if($baseDir) { $pathAlias=md5($dir); Yii::setPathOfAlias($pathAlias,$baseDir); $alias="pathAlias.$alias"; } // Current Yii::import code }
@Yeti
I think there is no need to modify
Yii::import()
. You can write simple helper to yii.If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.