【问题标题】:How to distinct vendor classes and native classes in PHP autoload?如何区分 PHP 自动加载中的供应商类和本机类?
【发布时间】:2015-06-16 09:58:48
【问题描述】:

如何区分 PHP 自动加载中的矢量类和原生项目类? 查看文件和命名空间结构的一部分:

app/
app/Models/
app/Models/User.php
app/Contoller/
app/Contoller/Login.php
vendor/
vendor/company/package/Helper.php

现在 PSR-4 说如果需要包含一个类,自动加载必须从供应商处包含它,那么如何包含我的原生项目类,例如在控制器中包含模型? 例如以下代码:

$user = new App\Models\User();

自动加载在供应商文件夹中查找“App”公司(文件夹),一种方法是在自动加载中使用某些条件,如果命名空间以“App”开头,则在本机项目中查找类,这是标准方法吗?

第二个,这个呢,vendor里面有个package,vendor name里面的company name是“App”,什么是完整的方式?

【问题讨论】:

  • 你应该在 Stack Overflow 上问这个问题,因为它是关于编码实现的。避免使用“完美”、“标准”和“最佳”等词;请指定您的标准。
  • 您是否考虑过使用“自动加载器”程序之一?我使用'aura'的那个:Aura.Autoload。我也使用了Symfony2 class loader。它们都是独立的,因此可以在任何项目中使用并且工作正常。

标签: php model-view-controller


【解决方案1】:

最好的解决方案是在 composer.json 文件中设置 PSR-4 自动加载,如下例所示:

// Part of composer.json
"autoload" : {
    "psr-4" : {
        "App\\" : "app/"
    }
}

现在您不需要额外的自动加载,Composer 自动加载会为您完成。 当请求的类位于 App 命名空间下时,Composer 会在上面的 composer.json 文件中设置的 app 文件夹中查找它。

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2019-03-16
    • 2015-03-30
    • 1970-01-01
    • 2021-11-02
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多