Problem with DboSource - Fatal error: Access to undeclared static property: DboSource::$methodCache
Dear Community, Not sure if this is the right place, but here goes. I've upgraded an application from 1.3.10 to 2.0.2 and now get the following error: "Fatal error: Access to undeclared static property: DboSource:: $methodCache in /var/www/html/myapp/lib/Cake/Model/Datasource/ DboSource.php on line 3090" The method in my controller is accessed through an Ajax request (to check if a user is still logged in). I'm using a master-slave setup and have modified the AppModel callbacks appropriately (as explained on one of the bakery pages). For Cake 1.3 this works nicely, but on 2.0 I get the error above. I have modified the cake code (I know I shouldn't :-) ) as follows: --- cakephp.old/lib/Cake/Model/Datasource/DboSource.php +++ cakephp.new/lib/Cake/Model/Datasource/DboSource.php @@ -3096,7 +3096,7 @@ class DboSource extends DataSource { */ public function __destruct() { if ($this->_methodCacheChange) { - Cache::write('method_cache', self::$methodCache, '_cake_core_'); + if (!empty(self::$methodCache)) Cache::write('method_cache', self:: $methodCache, '_cake_core_'); } } This solved the problem and I no longer get the messages. Is this a bug and is my fix above the correct solution? Many thanks in advance! Kind regards, Derik app/Model/AppModel.php $values) { // Check for masters if one has not been set yet, named 'master1', 'master2', etc. if ((!isset($_useDbConfigMaster)) && (preg_match('/^master[0-9]*+$/i', $name) == 1)) $masters[] = $name; // Check for slaves if one has not been set yet, named 'slave1', 'slave2', etc. if ((!isset($_useDbConfigSlave)) && (preg_match('/^slave[0-9]*+$/i', $name) == 1)) $slaves[] = $name; } // Update the master config if we found one and we haven't set one already (choose randomly). if ((!isset($_useDbConfigMaster)) && (count($masters) > 0)) $_useDbConfigMaster = $masters[rand(0, count($masters) - 1)]; // Update the slave config if we found one and we haven't set one already (choose randomly). if ((!isset($_useDbConfigSlave)) && (count($slaves) > 0)) $_useDbConfigSlave = $slaves[rand(0, count($slaves) - 1)]; } // Set the master config or use the default if one could not be found. if (isset($_useDbConfigMaster)) $this->useDbMaster = $_useDbConfigMaster; else $_useDbConfigMaster = $this->useDbMaster; // Set the slave config or use the default if one could not be found. if (isset($_useDbConfigSlave)) $this->useDbSlave = $_useDbConfigSlave; else $_useDbConfigSlave = $this->useDbSlave; // The default will be the slave config, used for read- only operations. $this->useDbConfig = $this->useDbSlave; parent::__construct($id, $table, $ds); } public function save($data = null, $validate = true, $fieldList = array()) { $oldDb = $this->useDbConfig; $this->setDataSource($this->useDbMaster); if (isset($this->data) && isset($this->data[$this- >name])) unset($this->data[$this->name]['modified']); if (isset($data) && isset($data[$this->name])) unset($data[$this->name]['modified']); $isSave = parent::save($data, $validate, $fieldList); $this->setDataSource($oldDb); return $isSave; } public function saveAll($data = null, $options = array()) { $oldDb = $this->useDbConfig; $this->setDataSource($this->useDbMaster); if (isset($this->data) && isset($this->data[$this- >name])) unset($this->data[$this->name]['modified']); if (isset($data) && isset($data[$this->name])) unset($data[$this->name]['modified']); $isSave = parent::saveAll($data, $options); $this->setDataSource($oldDb); return $isSave; } public function updateAll($fields, $conditions = true) { $oldDb = $this->useDbConfig; $this->setDataSource($this->useDbMaster); if (isset($this->data) && isset($this->data[$this- >name])) unset($this->data[$this->name]['modified']); if (isset($data) && isset($data[$this->name]))
Re: Problem with DboSource - Fatal error: Access to undeclared static property: DboSource::$methodCache
Hi there, Looks like my fix didn't work. I tried: Index: /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php === --- /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php +++ /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php @@ -3087,7 +3087,9 @@ */ public function __destruct() { if ($this->_methodCacheChange) { - Cache::write('method_cache', self::$methodCache, '_cake_core_'); + if (!empty(self::$methodCache)) { + Cache::write('method_cache', self:: $methodCache, '_cake_core_'); + } } } and this seems better, for now... :-) Kind regards, Derik On Thu, 2011-10-20 at 23:11 -0700, J.W.F. Thirion wrote: > Dear Community, > > Not sure if this is the right place, but here goes. I've upgraded an > application from 1.3.10 to 2.0.0 and now get the following error: > > "Fatal error: Access to undeclared static property: DboSource:: > $methodCache in /var/www/html/myapp/lib/Cake/Model/Datasource/ > DboSource.php on line 3090" > > I'm using a master-slave setup and have modified the AppModel > callbacks appropriately (as explained on one of the bakery pages). For > Cake 1.3 this works nicely, but on 2.0 I get the error above. I have > modified the cake code (I know I shouldn't :-) ) as follows: > > Index: /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php > === > --- /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php > +++ /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php > @@ -3087,6 +3087,9 @@ > */ > public function __destruct() { > if ($this->_methodCacheChange) { > + if (empty(self::$methodCache)) { > + self::$methodCache = > Cache::read('method_cache', '_cake_core_'); > + } > Cache::write('method_cache', self:: > $methodCache, '_cake_core_'); > } > } > > This solved the problem and I no longer get the messages. Is this a > bug and is my fix above the correct solution? > > Many thanks in advance! > > Kind regards, > Derik -- Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions. To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php
Problem with DboSource - Fatal error: Access to undeclared static property: DboSource::$methodCache
Dear Community, Not sure if this is the right place, but here goes. I've upgraded an application from 1.3.10 to 2.0.0 and now get the following error: "Fatal error: Access to undeclared static property: DboSource:: $methodCache in /var/www/html/myapp/lib/Cake/Model/Datasource/ DboSource.php on line 3090" I'm using a master-slave setup and have modified the AppModel callbacks appropriately (as explained on one of the bakery pages). For Cake 1.3 this works nicely, but on 2.0 I get the error above. I have modified the cake code (I know I shouldn't :-) ) as follows: Index: /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php === --- /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php +++ /var/www/html/myapp/lib/Cake/Model/Datasource/DboSource.php @@ -3087,6 +3087,9 @@ */ public function __destruct() { if ($this->_methodCacheChange) { + if (empty(self::$methodCache)) { + self::$methodCache = Cache::read('method_cache', '_cake_core_'); + } Cache::write('method_cache', self:: $methodCache, '_cake_core_'); } } This solved the problem and I no longer get the messages. Is this a bug and is my fix above the correct solution? Many thanks in advance! Kind regards, Derik app/Model/AppModel.php $values) { // Slaves have to be named "slave1", "slave2", etc... if (preg_match('/^slave[0-9]*+$/i', $name) == 1) { $slaves[] = $name; } } if (count($slaves) > 0) { // Randomly use a slave $_useDbConfig = $slaves[rand(0, count($slaves) - 1)]; } else { $_useDbConfig = "default"; } } $this->useDbConfig = $_useDbConfig; parent::__construct($id, $table, $ds); } function save($data = null, $validate = true, $fieldList = array()) { $oldDb = $this->useDbConfig; $this->setDataSource("master"); if (isset($this->data) && isset($this->data[$this- >name])) unset($this->data[$this->name]['modified']); if (isset($data) && isset($data[$this->name])) unset($data[$this->name]['modified']); $isSave = parent::save($data, $validate, $fieldList); $this->setDataSource($oldDb); return $isSave; } function saveAll($data = null, $options = array()) { $oldDb = $this->useDbConfig; $this->setDataSource("master"); if (isset($this->data) && isset($this->data[$this- >name])) unset($this->data[$this->name]['modified']); if (isset($data) && isset($data[$this->name])) unset($data[$this->name]['modified']); $isSave = parent::save($data, $options); $this->setDataSource($oldDb); return $isSave; } function updateAll($fields, $conditions=true) { $oldDb = $this->useDbConfig; $this->setDataSource("master"); if (isset($this->data) && isset($this->data[$this- >name])) unset($this->data[$this->name]['modified']); if (isset($data) && isset($data[$this->name])) unset($data[$this->name]['modified']); $isUpdated = parent::updateAll($fields, $conditions); $this->setDataSource($oldDb); return $isUpdated; } function delete($id = null, $cascade = true) { $oldDb = $this->useDbConfig; $this->setDataSource("master"); $isDeleted = parent::delete($id, $cascade); $this->setDataSource($oldDb); return $isDeleted; } function deleteAll($conditions, $cascade = true, $callbacks = false) { $oldDb = $this->useDbConfig; $this->setDataSource("master"); $isDeleted = parent::deleteAll($conditions, $cascade, $callbacks); $this->setDataSource($oldDb); return $isDeleted; } function current_user() { App::import('Component','Session'); $Session = new SessionComponent(); return array('id'=>$Session->read('Authacl.id')); } } ?> and my app/Config/database.php: class DATABASE_CONFIG { /* default = master, e.g. for sessions and if you don't have app/views/pages/home.ctp you need it too */ var $default =