Настройка композитора (Facebook Ads SDK) с помощью CodeIgniter

116
16

У меня есть приложение CodeIgniter. Я пытался настроить его для работы с Facebook ADS SDK (https://github.com/facebook/facebook-php-ads-sdk).

Я хочу использовать простые строки в моем контроллере, например:

use FacebookAds\Object\CustomAudience;
use FacebookAds\Object\Fields\CustomAudienceFields;
use FacebookAds\Object\Values\CustomAudienceSubtypes;

$audience = new CustomAudience(null, 'act_123123');

Я создал файл composer.json:

{
"require": {
"facebook/php-ads-sdk": "2.8.*"
}
}

Я пропустил это через команду

php composer.phar install --no-dev

И все сработало хорошо. Он установил мне autoload.php с внешней папкой facebook.

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

Я пробовал два разных подхода:

Сначала нужно было включить его в мой index.php Вот так:

include_once 'application/vendor/autoload.php';
require_once BASEPATH.'core/CodeIgniter.php';

Однако я получал ошибки для того, чтобы не загружать мои классы, которые находятся в папке приложения/ядра (Back_Controller расширяет CI_Controller, и я использую Back_Controller в моем каждом контроллере, у меня также есть My_Model и Front_Controller).

Второй подход: использовать функцию CodeIgniter для использования Автозагрузчика вместе с Composer. Поэтому я изменил конфигурацию:

$config['composer_autoload'] = TRUE;

Оба подхода возвратили мне те же ошибки:

"Неустранимая ошибка: класс" Back_Controller "не найден в /public_html/application/controllers/admin/Shops.php в строке 4

Предупреждение: include(): нарушение open_basedir. Файл (application/errors/html/error_php.php) не входит в допустимые пути:() в /public_html/system/core/Exceptions.php в строке 269 "

Как я могу настроить его так, чтобы Facebook SDK работал вместе с CodeIgniter? Любая помощь будет очень оценена. Спасибо.

Я думаю, что одним из решений было бы добавить "autoload" в composer.json, чтобы он загружал мои основные классы, но я не могу понять, как это должно быть. Я пытался:

"autoload": {
"psr-4": {
"Back_Controller\\":"core/"
}
}

спросил(а) 2021-01-28T00:58:49+03:00 3 месяца, 1 неделя назад
1
Решение
97

Попробуйте следующее:

Включить основной файл Api

include APPPATH.'vendor/wherever_your_sdk_is/FacebookAds/Api.php';

Затем сделайте следующее... согласно документации...

use FacebookAds\Api;

// Initialize a new Session and instanciate an Api object
Api::init($app_id, $app_secret, $access_token);

// The Api object is now available trough singleton
$api = Api::instance();

ответил(а) 2021-01-28T00:58:49+03:00 3 месяца, 1 неделя назад
44

Догадаться. Я просто добавил "autoload" в composer.json для автоматической загрузки моих основных файлов, и теперь оба решения, которые я пробовал раньше, работают.

"autoload": {
"psr-4": {
"":"core/"
}
}

ответил(а) 2021-01-28T00:58:49+03:00 3 месяца, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема