![]()
В прошлом посте про GeoIP я использовал простую конструкцию в стиле plain php для подключения внешнего модуля к CakePHP. Конечно же, это не очень красиво, и как-то не совсем соотвествует hi-level oop-based framework программированию.
Что интересно, после небольшого загугления выяснилось, что в общем-то описания использования App::Import особенно нет, а если и есть, то в основном это слова о том, что эта конструкция заменяет старый и уже устаревший vendor(..)
Итак, что же делать?
Общая структура вызова имеет следующий вид:
App::import($type, $name, $parent, $search, $file, $return); |
Идея очень проста. Вам необходимо положить ваши внешние библиотеки в /app/vendors/. Если ваш внешний файл не содержит классов, то он будет просто подключён в стиле классического import’а. А вот если в файле есть описание класса, то можно указать какой именно класс вы ходите импортировать.
Вот несколько примеров взятых с оффициального сайта:
//Загрузка файла/geshi.php App::import('Vendor', 'geshi'); //Загрузка файла/flickr/flickr.php App::import('Vendor', 'flickr/flickr'); //Загрузка файла/some.name.php App::import('Vendor', 'SomeName', array('file' => 'some.name.php')); //Загрузка файла/services/well.named.php App::import('Vendor', 'WellNamed', array('file' => 'services'.DS.'well.named.php')); |
Из личного опыта скажу вот что:
при попытке импорта файла /ipernity/api.php (о котором я расскажу в одном из следующих постов) загрузка прошла без ошибок, но класс я так и не увидел. По этому я модифицировал вызов следующим образом:
App::import('Vendor','Iper_API',array('file'=>'ipernity/api.php')); |
Теперь класс Iper_API был успешно импортирован и я смог создать его экземпляр.

