使用psr-4的composer autoload classmap

时间:2017-04-19 05:48:05

标签: php composer-php autoload psr-4

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

"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');
 }
}

它不再工作,因为它在用户的命名空间中查找会话。 我知道有很多框架使用别名来实现它的开箱即用..它只是这个项目有点老了我试图组织它并摆脱所有需求随处可见 - 目前必须要求每个模型。

2 个答案:

答案 0 :(得分:0)

  
    

我想为其余文件添加一个psr-4加载器,并且能够在没有名称空间的情况下调用libs下的文件,并且不会“使用”它们类似于laravel中的别名。

  

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

如评论所述,添加反斜杠有效,但这是必需的最小值:

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

答案 1 :(得分:0)

我最后写了另一个类别,这个类别对我想要的所有类别进行别名处理,因此我可以将它们称为开箱即用。

你可以在这里看到它:

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

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

相关问题