Используйте TermExtractor в Laravel 5

Я хотел бы использовать библиотеку с именем 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();

это не работает

Спасибо!

Я следовал советам Алана Шторма — большое спасибо!

  1. Запуск композитора dumpautoload

    composer dumpautoload
    Generating autoload files
    

вроде бы нормально.

  1. Запуск моего кода

    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();

Любые предложения, что идет не так? Большое спасибо!

0

Решение

То, что вы сделали, это

  1. Настройте свой composer.json файл для использования fivefilters/term-extractor пакет

  2. Использовал 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));

Если это не работает, значит

  1. Сопровождающие fivefilters/term-extractor есть ошибка в логике автозагрузчика

  2. Композитор не работает автоматически composer dumpautoload для тебя

  3. Вы не запускаете свой код из загруженной среды 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();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]