【问题标题】:Composer autoload full example?作曲家自动加载完整示例?
【发布时间】:2015-03-18 17:21:13
【问题描述】:

我正在尝试输入 all the peaces together 我发现关于在作曲家中自动加载一个类,但我无法让它工作。我看到的每个示例都缺少某些部分。基本上它归结为两个 4 行的文件:

index.php

$loader = require 'vendor/autoload.php';
$loader->add('Vendor\\', __DIR__.'/../app/');
new Vendor_Package_Obj();

app/Vendor/Package/Obj.php

class Obj {}

我还尝试了 psr-4 以及所有可以想到的文件夹和名称的组合,用于 `Vendor Package Obj?但没有找到可行的解决方案。

如何使用这些标准中的任何一个使用 composer 自动加载文件?

【问题讨论】:

  • 你的班级不叫Vendor_Package_Obj。它被称为Obj,应该在命名空间中声明。
  • 有些例子使用命名空间,有些则没有。大多数示例根本不显示 Obj.php。仅举一个完整的例子。只有几行......

标签: php composer-php autoload


【解决方案1】:

根据PSR-4,完全限定类名必须具有顶级命名空间名称,也称为“供应商命名空间”,并且下划线在完全限定类名的任何部分都没有特殊含义。

试试这个:

cd ~
mkdir -p testproj/src/MyApp/Package
cd testproj
composer init && composer update

使用此内容创建您的 index.php:

<?php
$loader = require 'vendor/autoload.php';
$loader->add('MyApp\\', __DIR__.'/src/');
$a = new MyApp\Package\Obj();
var_dump($a);

并放入Obj类(src/MyApp/Package/Obj.php):

<?php
namespace MyApp\Package;

class Obj
{}

现在当你运行代码时:

php index.php

你应该得到这个作为输出:

class MyApp\Package\Obj#2 (0) {
}

目录脚手架也应该是这样的:

testproj
├── composer.json
├── index.php
├── src
│   └── MyApp
│       └── Package
│           └── Obj.php
└── vendor
    ├── autoload.php
    └── composer
        ├── ClassLoader.php
        ├── autoload_classmap.php
        ├── autoload_namespaces.php
        ├── autoload_psr4.php
        └── autoload_real.php

【讨论】:

  • 这在我删除了所有其他Obj.php 和我在src 中的文件夹后才起作用。非常感谢!
  • @edigu 你能帮我解决这个问题吗? => stackoverflow.com/questions/42179503/…
  • 用作模板的一个很好的例子。
  • @edigu index.php 的代码是否需要放在每个用作页面的文件中?例如。 index.php、faq.php、about.php
  • 如果您的应用没有路由器或实现某种前端控制器,则可以。我强烈建议使用路由器而不是创建单独的文件,例如 faq.php 和 about.php。您可以查看 GitHub 上的 nikic/fastroute 以获得一个很好的、独立于框架的示例。
猜你喜欢
  • 2013-12-09
  • 2013-03-05
  • 2015-09-24
  • 2018-06-15
  • 2016-07-08
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多