作曲家使用 psr-4 自动加载类映射

composer autoload classmap with psr-4

我正在尝试更改我以前编写的自动加载系统。 我正在使用作曲家,目前我正在使用 class 地图自动加载一个库。

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

我想为其余文件添加一个 psr-4 加载程序,并且能够在没有名称空间且没有 "use" 的库下调用文件,它们有点像 [=29= 中的别名].这就是我想要做的:

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

所以最终如果在 "libs" 我有会话 class 我将其称为:

Session::get('anything')

但现在在尝试添加 psr-4 并从命名空间 class

中调用它之后
namespace App\models;

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

它将不再起作用,因为它会在用户的命名空间中查找会话。 我知道有很多框架可以使用别名开箱即用..,只是这个项目有点旧,我正在尝试对其进行一些组织并摆脱任何地方的所有要求 - 目前每个模型必须要求。

I want to add a psr-4 loader for the rest of the files and to be able to call the files under libs without namespaces and without "use" them' kind of like aliases in laravel.

如果不添加 use 或添加以反斜杠 \ 开头的完全限定命名空间路径,则无法使用 类。这与你加载这些 类 的方式无关,而是 PHP 本身的基本要求 - 所以无论你想如何设计你的自动加载,都没有办法绕过它。

如评论所述,添加反斜杠有效,但这是最低要求:

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

我最后写了另一个 class 为我想要的任何 classses 添加别名,这样我就可以开箱即用地调用它们。

你可以在这里看到:

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

基本上我只是在使用 php class_alias 函数,所以我可以在使用它们之前加载我想要的所有 classes。 我认为 laravel 也是这样做的。