在 Laravel 5 项目中包括我的 class

Including my class in a Laravel 5 Project

我用一些解析 HTML 文件的辅助方法在 php 中创建了一个 class。

我想在我的 Laravel 项目中使用这个 class,但我是 Laravel 的新手,不清楚如何添加一个简单的 class 到 Laravel 5 项目。

这可能吗?或者我是否需要为我的 class 创建一个作曲家包,将其托管在某个地方,然后 require 它在我的 composer.json 文件中。包含一个简单的 PHP class 似乎需要做很多工作,我希望有更简单的方法。

如果你的 class 足够通用,可以在其他项目中使用它,最好的方法是将它作为一个包发布。

以下是使用 Laravel 5 创建包的方法:http://laravel.com/docs/5.0/packages

就目前而言,Laravel 5 中没有 great/easy 方法(可能是设计使然)。您可以采用的两种方法是

App 命名空间中创建一个新的 class

默认情况下 Laravel 5.0 在 app/ 文件夹中查找 App\ 前缀 classes,所以像这样的东西应该可以工作

#File: app/Helpers/Myclass.php
<?php
namespace App\Helpers;
class Myclass
{
}

然后用

创建你的class
$object = new App\Helpers\Myclass;

然而,此方法依赖于您在 App\ 命名空间中创建 classes,并且 App\ 命名空间是否由 Laravel 所有,存在一些歧义,或者归应用程序开发者所有。

创建您自己的命名空间并注册为 PSR-4 自动加载程序

更好但更复杂的方法是在您自己的命名空间中创建 classes,然后通过注册新的 PSR 自动加载器告诉 Laravel 这个命名空间。

首先,您需要创建 class 定义

#File: application-lib/Myclass.php
<?php
namespace Pulsestorm;
class Myclass
{
}

请注意,我们已经在根文件夹之外创建了一个新文件夹来保存名为 application-lib 的 classes。您可以随意命名此文件夹,因为在下一步中,您将向 composer.json 文件的自动加载器部分

添加一个部分
#File: composer.json
"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\": "app/",
        "Pulsestorm\": "application-lib/"          
    }
},

我们添加的部分是这个

"Pulsestorm\": "application-lib/"          

对象 (Pulsestorm\) 的键是您的命名空间。值 (application-lib) 是作曲家应在其中查找具有指定命名空间的 class 定义文件的文件夹。

将此添加到 composer.json 后,您需要告诉 Composer 使用 dumpautoload 命令

重新生成它的自动加载缓存文件
$ composer dumpautoload
Generating autoload files

完成上述操作后,您应该能够用

实例化您的class
$object = new Pulsestorm\Myclass;     

"real" 正确的方法是为您的助手 class 创建一个通用的作曲家包,然后 require 将该作曲家包放入您的 laravel项目。然而,对于一个简单的库助手来说,这可能比您愿意承担的工作要多。