繁体   English   中英

Composer PSR-0自动加载不起作用

[英]Composer PSR-0 autoloading dont work

我的应用程序自动加载模块控制器类有问题。 我尝试配置composer.json但仍然无法正常工作。 可能我正在做这个目录结构的错误。 我尝试了作曲家doc的例子,但又一次不工作......

目录结构:

|- admin
|----- modules
|--------- Menu
|------------Controller
|--------------MenuController.php

让我们看看composer.json

{
  "autoload": {
    "psr-0": { "Admin\\Modules\\": "" }
  }
}

我尝试设置路径,但没有再次//“Admin \\ Modules \\”:“admin / modules”

菜单控制器

namespace Admin\Modules\Menu\Controller;

class MenuController extends AbstractAdminBaseController

FrontController

require 'vendor/autoload.php';

new \Admin\Modules\Menu\Controller\MenuController();

所有时间都没有找到。 我尝试了谷歌的100个例子,没有。 如何减缓这个问题的任何例子? 谢谢

更新结构:

├───admin
│   └───modules
│         └───Menu
│            └───controller
│                    └───MenuController.php
├───vednor
│   └───autoload.php
│   └───composer
│          └───autoload_classmap.php
│          └───autoload_namespaces.php
│          └───autoload_psr4.php
│          └───autoload_real.php
│          └───ClassLoader.php
├───public
├───assets
├───index.php
├───composer.json
├───composer.lock

你的PSR-0永远不会工作,因为这个标准规定文件的路径必须与类名完全一样。 请注意,命名空间的第一部分是“Admin”,但第一个目录部分只是“admin” - 案例必须完全匹配,否则它将不起作用(或仅适用于不区分大小写的文件系统)。

但是,您将成功使用PSR-4。 为什么? 因为使用PSR-4,将从完整的类名中删除给定的名称空间前缀,其余的将被转换为在为名称空间前缀指定的目录中搜索的路径。

案例示例:

"autoload": {
  "psr-0": { "Admin\\Modules\\": "" }
}

无法工作,因为文件位于路径admin/modules ,但必须位于Admin/Modules

"autoload": {
  "psr-4": { "Admin\\Modules\\": "admin/modules/" }
}

将起作用,因为删除了前缀Admin\\Modules\\ ,并将剩余的类名转换为路径并添加到admin/modules

啊,有一个问题! 它不起作用,因为你选择命名类...\\Controller\\... ,但路径再次.../controller/...

老实说,我强烈建议将您的文件名和位置转换为PSR-4兼容性,即使对于您可以使用Composer解决的前缀目录也是如此。 这将消除我看到的令人惊讶的小写目录结构。

我的意思是:如果位于那里的每个类都是Controller那么为什么controller目录首先是小写? 我真的无法理解这一点。

暂无
暂无

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

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