繁体   English   中英

使用psr-4的composer自动加载类图

[英]composer autoload classmap with psr-4

我正在尝试更改我之前编写的自动加载系统。 我正在使用composer,目前仅使用类映射自动加载一个库。

"autoload": {
 "classmap": ["libs/"]
}

我想为其余文件添加psr-4加载程序,并能够在libs下调用文件而没有名称空间,也无需在laravel中像别名一样“使用”它们。 这就是我想要做的:

"autoload": {
 "classmap": ["libs/"],
 "psr-4": {
  "App\\": ""
 }
}

因此,最终如果在“ libs”中,我拥有Session类,则将其称为:

Session::get('anything')

但是现在尝试添加psr-4并从命名空间类中调用它之后

namespace App\models;

Class User{
 function get(){
  return Session::get('anything');
 }
}

它不再起作用,因为它在用户名称空间内寻找会话。 我知道有很多框架可以使用别名直接实现它。.,只是这个项目有点旧,我正在尝试对其进行组织,以消除所有地方的所有需求-目前每个模型必须。

我想为其余文件添加psr-4加载程序,并能够在libs下调用文件而没有名称空间,也无需在laravel中像别名一样“使用”它们。

您不能使用类而不添加use或添加以反斜杠\\开头的完全限定名称空间路径。 这与加载这些类的方式无关,但这是PHP本身的基本要求-因此,无论您如何设计自动加载,都无法解决。

如前所述,添加反斜杠是可行的,但这是必需的最低要求:

namespace App\models;
Class User{
  function get(){
    return \Session::get('anything');
  }
}

我最终写了另一个类,该类为我想要的任何类提供别名,这样我就可以立即调用它们。

在这里你可以看到它:

https://github.com/shahafan/SAmvc-App/blob/master/Config/Aliases.php

基本上我只是在使用php class_alias函数,所以我可以在使用它们之前加载我想要的所有类。 我认为laravel以相同的方式进行操作。

暂无
暂无

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

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