0

我想在 Laravel 5 中使用一个名为 term-extractor ( https://packagist.org/packages/fivefilters/term-extractor ) 的库。我尝试通过 composer 安装它

composer require "fivefilters/term-extractor:*" 

我认为,这一步是成功的,因为我找到了以下目录:vendor/fivefilters/term-extractor。composer.json 中还添加了一行:

"require": {
        "laravel/framework": "5.0.*",
        "fivefilters/term-extractor": "*"
    },

但从这一点来看,我不知道如何进行。

我的应用程序真的可以使用该软件包吗?我如何使用术语提取器?如果我尝试

$extractor = new TermExtractor();

它不起作用。

谢谢!

--

我听从了 Alan Storm 的建议——非常感谢!

  1. 运行作曲家转储自动加载

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

有什么建议吗?非常感谢!

4

1 回答 1

0

你所做的是

  1. 配置composer.json文件以使用fivefilters/term-extractor

  2. 使用 Composer 将fivefilters/term-extractor包下载到您的vendor文件夹中

您接下来要做什么取决于包开发人员设置他们的包以在现代 PHP 世界中运行良好的程度。

如果您在 packagist 上搜索包,您会发现该包的源存储库位于 BitBucket

如果您查看包的composer.json文件,您会看到它使用以下自动加载器部分进行设置

"autoload": {
    "psr-0": { 
        "TermExtractor": "",
        "Tagger": "",
        "PermissiveFilter": "",
        "DefaultFilter": ""
    }
}

无需详细介绍(StackOverflow 的答案太长了——请参阅我的Laravel、Composer 和 Autoloading 状态),这psr-0部分意味着 PHP 应该尝试从

vendor/fivefilters/term-extractor/TermExtractor.php

Laravel 5 设置为自动使用 Compoer 的自动加载器库。这意味着,如果你在 Laravel 引导环境中编写代码,你需要做的就是

$object = new TermExtractor();
var_dump(get_class($object));

如果这不起作用,则意味着

  1. 的维护者fivefilters/term-extractor在他们的自动加载器逻辑中有一个错误

  2. Composer 不会自动composer dumpautoload为您运行

  3. 您不是从 Laravel 引导环境(app/routes.php、控制器文件等)运行代码

我会从跑步开始

$ composer dumpautoload

看看是否有帮助。如果它没有发布错误,或者发生了什么意外行为,以及您在哪里编写此代码(回到您的主要问题中)将帮助这里的人们帮助您诊断系统出了什么问题。

更新:根据更新的问题,出现以下错误

哎呀,看起来像出事了。NewsletterController.php 第 81 行中的 1/1 FatalErrorException:找不到类 > 'Fivefilters\TermExtractor'

听起来好像您正在尝试从位于Fivefilters名称空间中的文件中运行代码。IE

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();
于 2015-02-24T23:38:03.293 回答