This extension provides a handy way to store and use application parameters such as caching time for components, site admin email, or other things. It is extremely useful when you need to provide interface for editing of these parameters. The out-of-box Yii distribution allows to use only configuration file, which is not perfect way to do it (yet much faster). Current extension allows you to configure parameters.
protected/extensionscreateParamsTable to create the table type you needPDO::PARAM_LOB to the constant you needSet up component in the application config:
'par'=>array( 'class' => 'application.extensions.dbparam.XDbParam', 'connectionID' => 'db',//id of the connection component, just the same as with CDbCache // 'preload' => 'test,test2', //comma-separated string or array of params to be loaded anyway. Other params are loaded only when requested. // 'autoLoad' => true,//loads all attributes when initializing // 'caseSensitive' => true, //setting to true makes all parameters case sensitive ),
Use the component:
Yii::app()->par->test = '1234';//set parameter. If it is not present, it will be created echo Yii::app()->par->test;//output parameter. If it is not present, exception is thrown //load several parameters in one query. Useful if you're going to use them in the next lines Yii::app()->par->load(array('test', 'test2')); //OR Yii::app()->par->load('test,test2'); //OR Yii::app()->par->load();//loads all attributes //delete the specified parameters or all of them if none specified Yii::app()->par->purge('test,test2');//delete test and test 2 //OR Yii::app()->par->purge(array('test', 'test3'));//delete test and test 3 //OR Yii::app()->par->purge();//delete ALL parameters!
Total 6 comments
To Serialize the data:
Line 267
Line 292
Great extension
but wouldn't it make sense to serialize the values before saving so that you could also store arrays?
I made a few modifications to your code to do that. Works great
Thanks a lot for such extensive code review! I don't have time for v3 now, but I've corrected all bugs you listed: 1) Yes, really critical, how could I miss it? :) 2) Yes, really... I should use unit testing next time. 3) Yes, I didn't realize that 3.1) Yes, it is not needed. Update is uploaded!
This review is for V2
Great extension but there a couple of minor bugs that (with one exception) don't stop your app working, but mean the extension is not being as efficient as it can be.
1 SQL syntax error
Issue: This does stop things working as it generates an SQL syntax error
Severity: major - it doesn't work
Fix: change line 331 from
$sql .= 'WHERE name IN (\''.implode('\',\'', $params).'\')';to
$sql .= ' WHERE name IN (\''.implode('\',\'', $params).'\')';(add a space before WHERE)
2 Problem with case sensitivity
Issue: Parameters are being cached case insensitively and read case sensitively. If parameters have uppercase letters this means there is never a cache hit and the parameter is always read from the DB instead of the cache for second and subsequent reads, resulting in additional queries.
Severity: minor - you always get the parameter.
Fix: Change lines 212 and 295 to read
if (!$this->caseSensitive)(add ! before $this)
3 preprocessParams() not handling null correctly
Issue: If there are no preload parameters, preprocessParameters() receives null from init() at line 117 but returns a non-empty array meaning the test at line 118 is always true.
Severity: very minor - one extra query per request
At line 238, !is_array(null) === true, which means line 240, $params = explode(',', $params);, is executed.
explode(null) results in an array with a single entry of an empty string.
When this is passed back to init() the test at line 118 is always true as $this->preload is never empty, which means the preload query is run even when not needed.
Fix: Change line 238 from
if (!is_array($params))to
if (is_string($params))Only strings are exploded leaving
nulluntouched, which means the test at line 118 will give the expected result and not run the query if not needed.I also think lines 246 and 247 are not needed; $preload is not declared in the scope of the method.
With these fixes the extension does just what I need; thanks. Looking forward to V3.
Удачи! ;)
ok
Leave a comment
Please login to leave your comment.