如何在 Laravel 5.1 中自动加载自定义类?
Posted
技术标签:
【中文标题】如何在 Laravel 5.1 中自动加载自定义类?【英文标题】:How can I autoload a custom class in 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 会报告以下错误:
我不确定我做错了什么。
【问题讨论】:
【参考方案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);
参考见:
http://www.php-fig.org/psr/psr-4/【讨论】:
【参考方案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
的文件夹,它工作了以上是关于如何在 Laravel 5.1 中自动加载自定义类?的主要内容,如果未能解决你的问题,请参考以下文章
自动加载中的 Laravel 5.1 Composer.json 调用文件