【问题标题】:How can I autoload a custom class in Laravel 5.1?如何在 Laravel 5.1 中自动加载自定义类?
【发布时间】:2015-11-02 06:32:33
【问题描述】:

我在app 文件夹中创建了一个library 文件夹来添加我自己的类。

这是app/library/helper.php文件的内容:

<?php

namespace Library;

class MyHelper
{
    public function v($arr)
    {
        var_dump($arr);
    }
}

我将命名空间添加到composer.json

然后我跑了

$ composer dump-autoload

但它似乎没有任何效果。

文件

  • vendor/composer/autoload_psr4.php
  • vendor/composer/autoload_classmap.php

没有改变。

如果我尝试创建MyHelper 的实例,Laravel 会报告以下错误:

我不确定我做错了什么。

【问题讨论】:

    标签: php laravel composer-php autoload


    【解决方案1】:

    你的自动加载配置差不多好了,但是你有

    • 命名空间错误
    • 路径错误

    要解决此问题,请调整您的自动加载配置:

    {
        "autoload": {
            "classmap": [
                "database"
            ],
            "psr-4": {
                "App\\": "app/"
            }
        }
    }
    

    然后将目录/library重命名为/Library(注意大小写)。

    然后将文件/app/Library/helper.php重命名为/app/Library/MyHelper.php(注意类名应该如何匹配文件名)。

    然后调整 /app/Library/MyHelper 提供的类的命名空间以匹配 PSR-4 前缀(以及您的项目的结构),以及类的用法:

    namespace App\Library;
    
    class MyHelper 
    {
        public function v($arr)
        {
            var_dump($arr);
        }
    }
    

    参考见:

    【讨论】:

      【解决方案2】:

      composer.json 中使用files 指令:https://getcomposer.org/doc/04-schema.md#files

      {
          "autoload": {
              "files": ["app/library/helper.php"]
          }
      }
      

      【讨论】:

        【解决方案3】:

        使用 composer.json :

           "autoload": {
            "classmap": [
                "database",
                "app/Transformers"
            ]
         },
        

        像我添加的 app/Transformers 一样添加您的自动加载目录。

        别忘了添加运行composer dump-autoload

        这种方法的唯一问题是,无论何时添加新类,都需要运行composer dump-autoload

        或者您可以在 composer.json 中使用“文件”。

        "autoload": {
            "files": ["src/MyLibrary/functions.php"]
        }
        

        【讨论】:

          【解决方案4】:

          我知道这个问题已经回答了一段时间,但它不起作用的原因是您需要提供与文件结构对应的命名空间。因此,由于 Library 类位于您需要的 App 文件夹中:

          namespace App\Library;
          
          class MyHelper{
              public function v($arr){
                  var_dump($arr);
              }
          }
          

          另外,如果你要调用类MyHelper,你需要调用文件MyHelper.php

          【讨论】:

          • 不,上面写着App\Library
          • 哦,我不知道你用的是小写字母。在 Laravel 中,它将识别文件结构的大写和小写。我有一个名为 library 和命名空间 Library 的文件夹,它工作了
          猜你喜欢
          • 2019-12-03
          • 2016-01-01
          • 2016-01-23
          • 2020-10-22
          • 1970-01-01
          • 2016-04-17
          • 2017-11-09
          • 1970-01-01
          • 2015-02-15
          相关资源
          最近更新 更多