简体   繁体   English

PSR-4自动加载问题

[英]PSR-4 autoloading trouble

I want to load HomeController class from lib directory: 我想从lib目录加载HomeController类:

root/
-lib/
--/HomeController.php
-vendor/
-composer.json
-index.php

Composer.json Composer.json

"autoload": {
    "psr-4": {
        "Lib\\": "lib/"
    }
}

HomeController.php HomeController.php

namespace Lib;
class HomeController {}

index.php 的index.php

var_damp(new \Lib\HomeController.php);

It doesn't find the class. 它没有找到班级。
But if I put HomeController.php inside Controllers directory: 但是,如果我将HomeController.php放在Controllers目录中:

root/
-lib/
--/Controllers/HomeController.php

And update the namespaces: index.php to var_damp(new \\Lib\\Controllers\\HomeController.php); 并更新命名空间:index.php到var_damp(new \\Lib\\Controllers\\HomeController.php); and HomeController.php to: 和HomeController.php:

namespace Lib\Controllers;
class HomeController {}

It works perfect. 它完美无缺。
It's weird, I can't find any docs talking about it. 这很奇怪,我找不到任何谈论它的文档。 I don't need additional directories, in this case I want the HomeController class directly inside lib directory. 我不需要额外的目录,在这种情况下我想直接在lib目录中的HomeController类。

How can I make it works inside lib folder? 如何让它在lib文件夹中运行?

I think the trailing slash in the path reference is your problem. 我认为路径引用中的尾部斜杠是你的问题。 Change the autoload section in composer.json to this: composer.json的自动加载部分更改为:

"autoload": {
  "psr-4": {
    "Lib\\": "lib"
  }
}

...then run composer dump-autoload . ...然后运行composer dump-autoload

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM