不能在Laravel中重新声明类错误,但在本机php中工作正常

时间:2016-12-30 11:38:31

标签: php laravel

我正在使用Alchemy API来过滤掉一些数据。在本机代码中一切正常。但是当我在我的Laravel控制器中使用它时,它会抛出无法重新声明的类。 My controller,alchemyapi.php and example.php位于同一目录中。以下是我在本机代码中包含alchemyapi.php的方法

<?php   

require_once 'alchemyapi.php';
$alchemyapi = new AlchemyAPI("MY API KEY"); ?>

但是当我将它包含在控制器中时,它会抛出我的错误。有什么我想念的吗?

require_once 'alchemyapi.php';
$alchemyapi = new AlchemyAPI("MY API KEY");

本机代码(example.php)运行良好,没有任何问题。但是在laravel控制器中它会抛出错误Cannot redeclare class AlchemyAPI in alchemyapi.php line 20

2 个答案:

答案 0 :(得分:2)

而不是在require_once中使用namespace使用alchemyapi.php,然后在use

中使用namespace用于同一MyController

<强> alchemyapi.php

<?php
    namespace App\Http\Controller;
    class AlchemyApi {
        //your code
    }

<强> MyController.php

<?php
    namespace App\Http\Controller;
    use App\Http\Controller\AlchemyApi;
    class MyController {
        $alchemy = new AlchemyApi("Your_api_key");
    }

答案 1 :(得分:0)

好的,我认为发生的事情是alchemyapi.php已经被作曲家自动加载器包含在内。

试试这个。

  1. 在项目的根目录中创建目录lib
  2. 移动 alchemiapi.php进入lib。
  3. composer.json的“自动加载”部分下添加以下代码。确保JSON有效:

    "files": [
        "lib/alchemyapi.php",
    ],
    
  4. 运行composer dump-autoload。如果错误,您的composer.json无效或者您没有将文件放在正确的位置。

  5. 从控制器中删除 require_once 'alchemyapi.php';

  6. 在处理作曲家时,这就是你如何处理全局命名空间中的类。在运行composer之后,它会在app中扫描这些目录以获取PSR-4类。

    我无法确定,但我认为作曲家正在寻找它,而且你也是手动要求它。这可以解释为什么PHP认为你正在重新声明该类。