Dotenv\Dotenv::__construct() не является экземпляром Dotenv\Loader
Я пытаюсь создать код API Linkedin, где я нахожу странную ошибку
Fatal error: Uncaught TypeError: Argument 1 passed to Dotenv\Dotenv::__construct() must be an instance of Dotenv\Loader, string given, called in E:\xampp\htdocs\linkedinpi\examples\index.php on line 16 and defined in E:\xampp\htdocs\linkedinpi\vendor\vlucas\phpdotenv\src\Dotenv.php:31 Stack trace: #0 E:\xampp\htdocs\linkedinpi\examples\index.php(16): Dotenv\Dotenv->__construct('E:\\xampp\\htdocs...') #1 {main} thrown in E:\xampp\htdocs\linkedinpi\vendor\vlucas\phpdotenv\src\Dotenv.php on line 31
Что я не могу повторить, как решить проблему.
Я следовал за шагами для
https://github.com/zoonman/linkedin-api-php-client и https://github.com/zoonman/linkedin-api-php-client/tree/master/examples
Я уже скачал Vendor от Composer, и вот код, который я использовал
include_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor/autoload.php';
use LinkedIn\Client;
use LinkedIn\Scope;
$dotenv = new Dotenv\Dotenv(dirname(__DIR__));
$dotenv->load();
session_start();
$client = new Client(
getenv('[LINKEDIN CLIENT ID]'),
getenv('[LINKEDIN CLIENT SECRET]')
);
if (isset($_GET['code'])) { // we are returning back from LinkedIn with the code
if (isset($_GET['state']) && // and state parameter in place
isset($_SESSION['state']) && // and we have have stored state
$_GET['state'] === $_SESSION['state'] // and it is our request
) {
try {
// you have to set initially used redirect url to be able
// to retrieve access token
$client->setRedirectUrl($_SESSION['redirect_url']);
// retrieve access token using code provided by LinkedIn
$accessToken = $client->getAccessToken($_GET['code']);
h1('Access token');
pp($accessToken); // print the access token content
h1('Profile');
// perform api call to get profile information
$profile = $client->get(
'people/~:(id,email-address,first-name,last-name)'
);
pp($profile); // print profile information
$share = $client->post(
'people/~/shares',
[
'comment' => 'Checkout this amazing PHP SDK for LinkedIn!',
'content' => [
'title' => 'PHP Client for LinkedIn API',
'description' => 'OAuth 2 flow, composer Package',
'submitted-url' => 'https://github.com/zoonman/linkedin-api-php-client',
'submitted-image-url' => 'https://github.com/fluidicon.png',
],
'visibility' => [
'code' => 'anyone'
]
]
);
pp($share);
$companyId = '2414183';
h1('Company information');
$companyInfo = $client->get('companies/' . $companyId . ':(id,name,num-followers,description)');
pp($companyInfo);
h1('Sharing on company page');
$companyShare = $client->post(
'companies/' . $companyId . '/shares',
[
'comment' =>
sprintf(
'%s %s just tried this amazing PHP SDK for LinkedIn!',
$profile['firstName'],
$profile['lastName']
),
'content' => [
'title' => 'PHP Client for LinkedIn API',
'description' => 'OAuth 2 flow, composer Package',
'submitted-url' => 'https://github.com/zoonman/linkedin-api-php-client',
'submitted-image-url' => 'https://github.com/fluidicon.png',
],
'visibility' => [
'code' => 'anyone'
]
]
);
pp($companyShare);
$filename = './demo.jpg';
$client->setApiRoot('https://api.linkedin.com/');
$mp = $client->upload($filename);
*/
} catch (\LinkedIn\Exception $exception) {
// in case of failure, provide with details
pp($exception);
pp($_SESSION);
}
echo '<a href="/">Start over</a>';
} else {
echo 'Invalid state!';
pp($_GET);
pp($_SESSION);
echo '<a href="/">Start over</a>';
}
} elseif (isset($_GET['error'])) {
pp($_GET);
echo '<a href="/">Start over</a>';
} else {
// define desired list of scopes
$scopes = [
Scope::READ_BASIC_PROFILE,
Scope::READ_EMAIL_ADDRESS,
Scope::MANAGE_COMPANY,
Scope::SHARING,
];
$loginUrl = $client->getLoginUrl($scopes);
$_SESSION['state'] = $client->getState();
$_SESSION['redirect_url'] = $client->getRedirectUrl();
echo 'LoginUrl: <a href="'.$loginUrl.'">' . $loginUrl. '</a>';
}
function pp($anything)
{
echo '<pre>' . print_r($anything, true) . '</pre>';
}
function h1($h) {
echo '<h1>' . $h . '</h1>';
}
3 ответа
Изменения для вызова пользовательского env класса Dotenv -> используется для запуска нескольких env
Ссылка Git для пакета:Ссылка Git для пакета
$dotenv = Dotenv\Dotenv::create(dirname(__DIR__), 'custom env');
$dotenv->load();
Столкнулся с этой проблемой, когда переходил с laravel 5.8 на laravel 6
обратите внимание, пожалуйста, добавьте пакет справки, поскольку поддержка удалена из основных файлов в laravel 6
Если вы используете 4.1...
$dotenv = Dotenv\Dotenv::createMutable(__DIR__, $evn_file);
$dotenv->load();
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__, $evn_file);
$dotenv->load();
Не уверен, что это то же самое (PHP не моя сильная сторона), но я нашел этот лайнер на CraftCMS , и он очень хорошо сработал для меня:
Dotenv\Dotenv::createUnsafeMutable(ENV_PATH)->safeLoad();