在Laravel 5中使用TermExtractor

时间:2015-02-24 21:55:35

标签: php laravel composer-php packagist

我想在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

    composer dumpautoload
    Generating autoload files
    
  2. 似乎很好。

    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()
      
    2. 我们在第81行找到了

      $extractor = new TermExtractor();
      

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

1 个答案:

答案 0 :(得分:0)

你做的是

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

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

  3. 你接下来要做什么取决于软件包开发人员如何在现代PHP世界中设置好自己的软件包。

    如果您搜索the package on packagist,您会发现该软件包的源存储库为at BitBucket

    如果您查看the package's composer.json file,您会看到使用以下自动加载器部分进行设置

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

    没有详细介绍(对于StackOverflow来说太长了 - 请参阅我的Laravel, Composer, and the State of Autoloading),这个psr-0部分意味着PHP应该尝试从<自动加载“TermExtractor”类/ p>

    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,控制器文件等)运行代码。

    4. 我首先要运行

      $ composer dumpautoload
      

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

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

        哎呀,好像出了什么问题。   NewsletterController.php第81行中的1/1 FatalErrorException:Class&gt;找不到'Fivefilters \ TermExtractor'

      听起来好像是在尝试从位于Fivefilters命名空间的文件中运行代码。即。

      namespace Fivefilters
      //... other code
      $extractor = new TermExtractor();
      

      根据代码运行的文件

      ,这没有多大意义
      app/Http/Controllers/NewsletterController.php
      

      我希望命名空间为App\Http\Controllers。无论如何,看起来five filters classes都存在于全局命名空间中。这意味着如果你想从命名空间的PHP文件中使用它们,你需要将它们作为全局类显式引用它们(领先\

      $object = new \TermExtractor;
      

      或使用文件顶部的use语句

      namespace Some/Non/Global/Namespace
      //...
      use TermExtractor;
      //...
      $extractor = new TermExtractor();