Композитор Автозагрузка
В настоящее время я пытаюсь использовать автозагрузку PSR-0 с Composer, но получаю следующую ошибку:
Fatal error: Class 'Twitter\Twitter' not found
Моя структура каталогов выглядит следующим образом
- Project
- src
- Twitter
Twitter.php
- vendor
- Test
index.php
Мой файл index.php выглядит так:
<?php
use Twitter;
$twitter = new Twitter();
Мой файл Twitter.php выглядит так
<?php
namespace Twitter;
class Twitter
{
public function __construct()
{
// Code Here
}
}
И наконец мой composer.json выглядит так:
{
"require": {
"phpunit/phpunit": "3.8.*@dev",
"guzzle/guzzle": "3.7.*@dev"
},
"minimum-stability": "dev",
"autoload": {
"psr-0": {
"Twitter" : "src/Twitter"
}
}
}
Я немного запутался. Я родом из C#, и этот способ работы меня немного смущает. Как правильно использовать автозагрузку PSR-0?
5 ответов
В вашем composer.json используйте:
"autoload": {
"psr-0": {
"": "src/"
}
}
или же
"autoload": {
"psr-0": {
"Twitter\\": "src/"
}
}
а потом беги php composer.phar dump-autoload
Использование
"psr-0": {
"Twitter" : "src/"
}
Это дает указание композитору создать автозагрузчик, который будет src
для всего от Twitter
Пространство имен. И так как это PSR-0
пространство имен обрабатывается как папка и добавляется к объявленному пути, поэтому его не следует включать в часть пути в composer.json
Прежде всего,
Мой файл index.php выглядит так:
use Twitter; $twitter = new Twitter();
Если это ваш index.php, вы забыли сначала включить скрипт автозагрузки композитора.
require __DIR__ . '/vendor/autoload.php';
См. https://getcomposer.org/doc/01-basic-usage.md#autoloading для получения подробной информации.
В вашем index.php есть ошибка, должна быть:
use Twitter\Twitter;
$twitter = new Twitter();
или же
$twitter = new Twitter\Twitter();
Это очень поздний ответ, но первое, что вам нужно, чтобы "автозагрузка" работала, это иметь версию PHP 5.6 и выше.