在 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项目。然而,对于一个简单的库助手来说,这可能比您愿意承担的工作要多。
我用一些解析 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项目。然而,对于一个简单的库助手来说,这可能比您愿意承担的工作要多。