【问题标题】:Including my class in a Laravel 5 Project将我的课程包括在 Laravel 5 项目中
【发布时间】:2015-02-15 21:51:59
【问题描述】:

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

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

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

【问题讨论】:

  • 推荐阅读为起点:laravel.com/docs/5.0/structure
  • 首先尝试一些谷歌搜索,有几种方法可以做到这一点。
  • 我做了,但找不到新的 laravel。大多数是给旧的
  • 把类放到一个文件里,把那个文件放到某个地方,然后用composer加载它。如果它是您想与其他项目重用的文件,那么逻辑位置是供应商目录(即不要将其与当前项目紧密耦合)。

标签: php laravel composer-php laravel-5


【解决方案1】:

就目前而言,在 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 autoloader

更好但更复杂的方法是在你自己的命名空间中创建类,然后通过注册一个新的 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 项目中。然而,对于一个简单的库助手来说,这可能比您愿意承担的工作要多。

【讨论】:

  • @GeorgeIrimiciuc “laravel”方式不会为任意类腾出空间,除非它们是作曲家管理的库。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-11-12
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2012-11-26
    • 2013-07-01
    相关资源
    最近更新 更多