I am having this line in my CakePHP code: $language = $this->Cookie->read('language');
and I’m getting this error:
Fatal error: Call to a member function read() on a non-object in C:Apache24htdocscakeappControllerComponentLanguageComponent.php on line 27
Here is my LanguageComponent.php code
<?php //App::Import('Component', 'Cookie'); class LanguageComponent extends Object { public $controller = null; public $components = array('Cookie'); public $languages = array(); public function initialize($controller) { $this->controller = $controller; if (empty($languages)) { $this->languages = Configure::read('Config.languages'); } $this->set(); } public function set($language = null) { $saveCookie = false; if (empty($language) && isset($this->controller)) { if (!empty($this->controller->params['named']['lang'])) { $language = $this->controller->params['named']['lang']; } elseif (!empty($this->controller->params['url']['lang'])) { $language = $this->controller->params['url']['lang']; } if (!empty($language)) { $saveCookie = true; } } if (empty($language)) { $language = $this->Cookie->read('language'); if (empty($language)) { $saveCookie = true; } } if (empty($language) && !array_key_exists($language, $this->languages)) { $language = Configure::read('Config.language'); } Configure::write('Config.language', $language); if ($saveCookie) { $this->Cookie->write('language', $language, false, '1 year'); } } } ?>
Where could the problem be?
Advertisement
Answer
Wrong parent class
Compare the code in the question:
class LanguageComponent extends Object {
class AuthComponent extends Component {
Extending the wrong class means that none of the component constructor logic is invoked, and the way components are loaded on first access will not be available.
In the process of upgrading?
This is possibly because the language component was originally written for 1.x – the parent class for components changed when 2.x was released. As mentioned in the 2.0 migration guide:
Component is now the required base class for all components.