mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
RECOMMIT This is a recommit of a previously merged, but reverted, commit. The initial commit had problems when running "tests/all flush=all" when dev/build would re-analyse a bunch of stuff; fixes to address this went into https://github.com/silverstripe/sapphire/pull/487, but for some reason the actual base changes didn't, so I'm re-submitting them in a separate pull.
BUGFIX Versioned's constructor doesn't provide suitable defaults. Previously a bug/feature in singleton, where it would pass null,true as params to strong_create, which would then get passed through as params to Versioned's constructor, meant that the code still executed fine (as was set to something that wasn't an array, so the null and true were instead taken as args). The fact that the usage of singleton(Versioned) never really used the classes code, purely for value lookup, meant that this never propagated errors. I've now switched singleton() to use the injector for retrieving values, which means these dud values are no longer passed through CHANGE Given that Config::inst is an implementation of the singleton pattern itself, I've removed the extra call to singleton(). A side effect of this is that it gets around a possibly nasty circular reference with the dependency injector (which relies on the config object); in future, this dependency structure should really be structured from the DI directly. MINOR Change singleton and strong_create to use dependency injector
This commit is contained in:
parent
9898cd9a95
commit
ae7fc6f4d2
@ -118,7 +118,7 @@ class Config {
|
|||||||
* @return Config
|
* @return Config
|
||||||
*/
|
*/
|
||||||
static public function inst() {
|
static public function inst() {
|
||||||
if (!self::$instance) self::$instance = singleton('Config');
|
if (!self::$instance) self::$instance = new Config();
|
||||||
return self::$instance;
|
return self::$instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,8 +356,6 @@ function getClassFile($className) {
|
|||||||
* way to access instance methods which don't rely on instance
|
* way to access instance methods which don't rely on instance
|
||||||
* data (e.g. the custom SilverStripe static handling).
|
* data (e.g. the custom SilverStripe static handling).
|
||||||
*
|
*
|
||||||
* @uses Object::strong_create()
|
|
||||||
*
|
|
||||||
* @param string $className
|
* @param string $className
|
||||||
* @return Object
|
* @return Object
|
||||||
*/
|
*/
|
||||||
@ -367,7 +365,7 @@ function singleton($className) {
|
|||||||
if(!is_string($className)) user_error("singleton() passed bad class_name: " . var_export($className,true), E_USER_ERROR);
|
if(!is_string($className)) user_error("singleton() passed bad class_name: " . var_export($className,true), E_USER_ERROR);
|
||||||
if(!isset($_SINGLETONS[$className])) {
|
if(!isset($_SINGLETONS[$className])) {
|
||||||
if(!class_exists($className)) user_error("Bad class to singleton() - $className", E_USER_ERROR);
|
if(!class_exists($className)) user_error("Bad class to singleton() - $className", E_USER_ERROR);
|
||||||
$_SINGLETONS[$className] = Object::strong_create($className,null, true);
|
$_SINGLETONS[$className] = Injector::inst()->get($className);
|
||||||
if(!$_SINGLETONS[$className]) user_error("singleton() Unknown class '$className'", E_USER_ERROR);
|
if(!$_SINGLETONS[$className]) user_error("singleton() Unknown class '$className'", E_USER_ERROR);
|
||||||
}
|
}
|
||||||
return $_SINGLETONS[$className];
|
return $_SINGLETONS[$className];
|
||||||
|
@ -234,8 +234,7 @@ abstract class Object {
|
|||||||
$class = self::$strong_classes[$class];
|
$class = self::$strong_classes[$class];
|
||||||
}
|
}
|
||||||
|
|
||||||
$reflector = new ReflectionClass($class);
|
return Injector::inst()->createWithArgs($class, $args);
|
||||||
return $reflector->newInstanceArgs($args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -92,7 +92,7 @@ class Versioned extends DataExtension {
|
|||||||
* The first stage is consiedered the 'default' stage, the last stage is
|
* The first stage is consiedered the 'default' stage, the last stage is
|
||||||
* considered the 'live' stage.
|
* considered the 'live' stage.
|
||||||
*/
|
*/
|
||||||
function __construct($stages) {
|
function __construct($stages=array('Stage','Live')) {
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
|
||||||
if(!is_array($stages)) {
|
if(!is_array($stages)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user