Создание простой библиотеки Codeigniter

Для моего текущего проекта я решил создать библиотеку для некоторых общих функций.

Пример: Login_check, get_current_user и т. Д.

С моими небольшими знаниями я создал простой, но, к сожалению, он не работает.

Здесь моя библиотека:

FileName: Pro.php и находится в application/libraries

 class Pro{ public function __construct() { parent::_construct(); $CI =& get_instance(); $CI->load->helper('url'); $CI->load->library('session'); $CI->load->database(); } function show_hello_world() { $text = "Hello World"; return $text; } } ?> 

И я попытался загрузить его на моем контроллере:

 <?php class Admin extends CI_Controller { function __construct() { parent::__construct(); $this->load->database(); $this->load->library(array('session')); $this->load->library("Pro"); } function index() { echo($this->Pro->show_hello_world()); } } ?> 

Я не вижу там никаких эррос … но я получаю пустую страницу.

Что со мной не так ??

Спасибо .

Изменить: я получил эту ошибку:

 Call to a member function show_hello_world() on a non-object in C:\wamp\www\Project\application\controllers\admin.php on line 13 

Related of "Создание простой библиотеки Codeigniter"

Одна вещь, которую я замечаю: удалить parent::__construct() из вашего конструктора библиотеки, потому что он не расширяет ничего, поэтому родитель не должен звонить.

Кроме того, включите отчет об ошибках, установив среду в «development» в index.php, и вы также можете повысить порог регистрации до 4 в config / config.php, чтобы вы регистрировали ошибки.

Попробуйте этот простой тестовый сценарий:

файл Pro.php в приложении / библиотеках:

 class Pro { function show_hello_world() { return 'Hello World'; } } 

Контроллер admin.php в приложении / контроллерах

 class Admin extends CI_Controller { function index() { $this->load->library('pro'); echo $this->pro->show_hello_world(); } } 

в то время как ваше имя класса заглавное, все ваши ссылки на библиотеку при загрузке и использовании должны быть строчными. вам также не нужен конструктор, как упоминал другой комментатор.

поэтому вместо:

 echo($this->Pro->show_hello_world()); 

Вы должны иметь:

 echo($this->pro->show_hello_world()); 

Я предпочитаю стандартный подход к автозагрузчику php, поэтому вам вообще не нужно менять свои классы, вы можете использовать свои стандартные классы без изменений

скажем, например, вы класс class 'Custom_Example_Example2' и хранится в библиотеках в подпапках, вы можете добавить этот автозагрузчик в master index.php

убедитесь, что он добавлен ниже определенной константы APPPATH

 //autoload custom classes function __autoload($className) { if (strlen(strstr($className, 'Custom_')) > 0 || strlen(strstr($className, 'Other1_')) > 0 || strlen(strstr($className, 'Other2_')) > 0) { $exp = explode('_', $className); $file = APPPATH.'libraries'; if(!empty($exp)) { foreach($exp as $segment) { $file .= '/'.strtolower($segment); } } $file .= '.php'; require_once $file; //debug //echo $file.'<br />'; } } 

Это будет искать вызовы класса, соответствующие префиксу «Custom_», и перенаправить их в относительное местоположение в этом случае

вам нужно только определить базовый префикс, а не подпапки / классы, которые будут автоматически обнаружены этим кодом

 APPPATH.'libraries/custom/example/example2.php' 

Вы можете назвать это в контроллере стандартным способом php

 $class = new Custom_Example_Example2; 

или

 $class = new custom_example_example2(); 

Вы можете изменить сценарий по своему вкусу в настоящее время, он ожидает, что все папки и имена файлов в библиотеке будут иметь строчные значения, но вы можете удалить функцию strtolower (), чтобы разрешить несколько обсадных колонн.

вы можете изменить запрос один раз для эха, чтобы протестировать вывод, раскомментировав эту строку и обновив страницу, убедитесь, что у вас есть класс init / test в контроллере или модели для запуска теста

 echo $file.'<br />'; 

Ответить