Я хотел бы использовать библиотеку с именем term-extractor (https://packagist.org/packages/fivefilters/term-extractor) в Laravel 5. Я пытался установить его через композитор с
composer require "fivefilters/term-extractor:*"
Я думаю, этот шаг был успешным, так как я нашел следующий каталог: vendor / fivefilters / term-extractor. Также была добавлена строка в composer.json:
"require": {
"laravel/framework": "5.0.*",
"fivefilters/term-extractor": "*"},
Но с этого момента я не знаю, как поступить.
Действительно ли пакет доступен для моего приложения?
Как я могу использовать термин экстрактор? Если я попробую с
$extractor = new TermExtractor();
это не работает
Спасибо!
—
Я следовал советам Алана Шторма — большое спасибо!
Запуск композитора dumpautoload
composer dumpautoload
Generating autoload files
вроде бы нормально.
Запуск моего кода
Whoops, looks like something went wrong.
1/1 FatalErrorException in NewsletterController.php line 81: Class 'Fivefilters\TermExtractor' not found
in NewsletterController.php line 81
at HandleExceptions->fatalExceptionFromError(array('type' => '1', 'message' => 'Class 'Fivefilters\TermExtractor' not found', 'file' => '/Applications/MAMP/htdocs/newsletterfeed/app/Http/Controllers/NewsletterController.php', 'line' => '81')) in HandleExceptions.php line 116
at HandleExceptions->handleShutdown()
где мы находимся в строке 81
$extractor = new TermExtractor();
Любые предложения, что идет не так? Большое спасибо!
То, что вы сделали, это
Настройте свой composer.json
файл для использования fivefilters/term-extractor
пакет
Использовал Composer для загрузки fivefilters/term-extractor
пакет в ваш vendor
папка
Что вы будете делать дальше, зависит от того, насколько хорошо разработчики пакетов настроили свой пакет для хорошей игры в современном мире PHP.
Если вы ищете пакет на упаковщике, вы найдете исходный репозиторий для пакета в BitBucket.
Если вы посмотрите на пакет composer.json
файл, вы увидите его настройку со следующим разделом автозагрузчика
"autoload": {
"psr-0": {
"TermExtractor": "",
"Tagger": "",
"PermissiveFilter": "",
"DefaultFilter": ""}
}
Не вдаваясь в подробности (это слишком длинный ответ для StackOverflow — см. Мой Laravel, композитор и состояние автозагрузки), этот psr-0
section означает, что PHP должен попытаться автоматически загрузить класс «TermExtractor» из
vendor/fivefilters/term-extractor/TermExtractor.php
Laravel 5 настроен на автоматическое использование библиотеки автозагрузчика Compoer. Это означает, что если вы пишете код из среды начальной загрузки Laravel, все, что вам нужно сделать, это
$object = new TermExtractor();
var_dump(get_class($object));
Если это не работает, значит
Сопровождающие fivefilters/term-extractor
есть ошибка в логике автозагрузчика
Композитор не работает автоматически composer dumpautoload
для тебя
Вы не запускаете свой код из загруженной среды Laravel (app/routes.php
, файл контроллера и т. д.)
Я бы начал с бега
$ composer dumpautoload
и посмотреть, поможет ли это. Если он не публикует сообщение об ошибке или непредвиденное поведение, а также то, где вы пишете этот код (вернитесь к основному вопросу), это поможет людям помочь вам диагностировать неполадки в вашей системе.
Обновить: На основе обновленного вопроса, следующая ошибка
Упс, похоже, что-то пошло не так.
1/1 FatalErrorException в строке NewsletterController.php 81: Класс> Fivefilters \ TermExtractor не найден
Звучит так, будто вы пытаетесь запустить свой код из файла, который находится в Fivefilters
Пространство имен. то есть
namespace Fivefilters
//... other code
$extractor = new TermExtractor();
Это не совсем имеет смысла — в зависимости от файла, из которого выполняется код
app/Http/Controllers/NewsletterController.php
Я ожидаю, что пространство имен будет App\Http\Controllers
, Независимо от этого, похоже, пять фильтров классов все живут в глобальном пространстве имен. Это означает, что если вы хотите использовать их из PHP-файла с пространством имен, вам потребуется ссылаться на них либо явно как глобальные классы (ведущие \
)
$object = new \TermExtractor;
Или используйте use
заявление в верхней части вашего файла
namespace Some/Non/Global/Namespace
//...
use TermExtractor;
//...
$extractor = new TermExtractor();
Других решений пока нет …