2013-06-24 2 views
0

У меня есть CodeIgniter искра определения & самозарядный класс libraries/Nci_nicecontroller.php:нагрузки расширенный контроллер от CI искры

class Nci_nicecontroller extends CI_Controller { 
    //... 
} 
//autoloaded using $autoload['libraries'][]='nci_nicecontroller'; 

теперь я хочу использовать Nci_nicecontroller в контроллере моего приложения, например:

class Welcome extends Nci_nicecontroller { 
    //... 
} 
//autoloaded using $autoload['sparks'][]='nci-extensions/0.0.4'; 

очевидно, Я не могу просто $this->load->spark в конструкторе моего контроллера, потому что это требуется для расширения класса.

Если вы не используете искры, я просто поместил Nci_nicecontroller в core/MY_Controller.php, но с искрами это не сработает.

Я пробовал автозагрузку искры в моем приложении, которое не сработало.

Тогда я попробовал:

get_instance()->load->spark('nci-extensions/0.0.4'); 

в заголовке controllers/welcome.php, что дает мне следующие ошибки:

Severity: Notice 
Message: Trying to get property of non-object 
Filename: controllers/welcome.php 
Line Number: 2 
    --and-- 
Fatal error: Call to a member function spark() on a non-object in 
C:\xampp\htdocs\CodeIgniter_demo\application\controllers\welcome.php on line 2 

что мне делать?

ответ

0

Попробуйте сделать что-то вроде этого:

class Wellcome extends CI_Controller { 
    protected static $_nci = null; 

    public function __construct(){ 
     parent::__construct(); 
     $this->_nci = $this->load->spark('nci-extensions/0.0.4'); 
    } 

    public function index(){ 
     $result = $this->_nci->getSomething(); 
     echo $result; 
    } 

} 
+0

что бы показать мне, если моя искра загружается вообще, но не решает мою проблему (нагружает искру до моего контроллера инстанциирован, поэтому контроллер может быть определено как «extends NCI ...»), или я чего-то не хватает? – nonchip

+0

, если вам нужно загрузить свою искру до запуска контроллера, вы можете использовать автозагрузку. Просто добавьте в application/config/autoload.php следующую строку: $ autoload ['sparks'] = array ('nci-extensions/0.0.4'); После этого вы будете доступны как $ this-> nci_extensions-> do_something(); – ToxaBes

+0

Я пробовал это раньше, не будет работать, так как весь класс Loader запускается в CI_Controller в первый раз. быстрый и грязный хак: '$ load = & load_class ('Loader', 'core'); @ $ load-> initialize(); 'в заголовке моего контроллера. – nonchip