Я создал основную библиотеку в папке application / core под названием MY_Library, и я пытаюсь расширить ее из класса библиотеки в приложении / библиотеках, но, к сожалению, она не может найти файл.
//application/core/My_Library.php class My_Library{ function __construct(){ } /** * This is the generic function that calls php curl to make a query. * @param $url * @param array $data * @param string $type * @return mixed|string */ public function callService($url,$data=array(),$type="get"){ if (strtolower($type) == "get"){ $url .= "?".http_build_query($data); $response = $this->doGet($url); }else if (strtolower($type) == "post"){ $fields_string = http_build_query($data); $response = $this->doPost($url,$fields_string); }else{ $response = "INVALID REQUEST"; } return $response; }
}
In my application/libraries class CakePixel extends MY_Library{ function __construct(){ parent::__construct(); } public function fireCakePixel($cakeOfferId,$reqId,$transactionId){ $cakeUrl = "http://oamtrk.com/p.ashx"; $param = array( "o" => $cakeOfferId, "reqid" =>$reqId, "t" => $transactionId ); $response = $this->callService($cakeUrl,$param,"get"); } }
Но я получаю фатальную ошибку
PHP Fatal error: Class 'MY_Library' not found in /application/libraries/cakeApi/pixel/CakePixel.php on line 10, referer:
Как я могу разрешить это без использования require_once или включить из файла класса, если это возможно.
Вы не должны загружать библиотеки в core
каталог. core
каталог предназначен для базовых классов или для «родительских» контроллеров, из которых вы хотите, чтобы ваши контроллеры расширялись. Вы должны загрузить все библиотеки в каталоге libraries
Codeigniter, а затем в своем контроллере вы можете вызвать функции в своей библиотеке следующим образом:
$this->load->library('my_library'); $results = $this->my_library->callService($params);
CI всегда сталкивается с системными библиотеками, если они существуют, тогда он ищет папку MY_ в основной папке или библиотеке в приложении, в библиотеке системных корней отсутствует библиотека library.php, поэтому вы получаете эту ошибку. если вы хотите авторизовать сторонние библиотеки из каталога ядра или библиотеки, вы можете использовать следующий код, который вам нужно добавить в config.php внизу или вверху
spl_autoload_register(function($class) { if (strpos($class, 'CI_') !== 0) { if (file_exists($file = APPPATH . 'core/' . $class . '.php')) { include $file; } elseif (file_exists($file = APPPATH . 'libraries/' . $class . '.php')) { include $file; } } });