将我的课程包括在Laravel 5项目中

时间:2015-02-15 21:51:59

标签: php laravel composer-php laravel-5

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

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

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

2 个答案:

答案 0 :(得分:4)

目前看来,在Laravel 5(可能是设计)中没有一个很好/简单的方法。您可以采取的两种方法是

App命名空间

中创建一个新类

默认情况下,Laravel 5.0会在App\文件夹中查找app/前缀类,因此这样的内容应该可以正常工作

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

然后使用

创建您的课程
$object = new App\Helpers\Myclass;

然而,这种方法依赖于您在App\命名空间中创建类,并且如果App\命名空间由Laravel拥有,或者由应用程序的开发人员拥有,则存在一些歧义。

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

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

首先,您要创建类定义

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

请注意,我们在根文件夹下创建了一个新文件夹,用于保存名为application-lib的类。您可以将此文件夹命名为您喜欢的任何名称,因为在下一步中,您将向composer.json文件的自动加载器部分添加一个部分

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

我们添加的部分是

"Pulsestorm\\": "application-lib/"          

对象的键(Pulsestorm\)是您的命名空间。值(application-lib)是composer应查找具有指定命名空间的类定义文件的文件夹。

将此内容添加到composer.json后,您需要告诉Composer使用dumpautoload命令重新生成自动加载缓存文件

$ composer dumpautoload
Generating autoload files

完成上述操作后,您应该可以使用

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

“真正的”正确的方法是为你的助手类创建一个通用的作曲家包,然后将require作曲家包打包到你的laravel项目中。然而,这可能比你想要一个简单的库助手更多的工作。

答案 1 :(得分:1)

如果您的类具有足够的通用性,可以在其他项目中使用它,那么最好的方法是将其作为包发布。

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