Composer php 使用Composer管理自己的类

Composer php 使用Composer管理自己的类,composer-php,autoload,slim,Composer Php,Autoload,Slim,我是作曲家和自动装弹手的新手。我认为我还缺乏文件组织策略。 我正试图在slimframework上建立一个新项目。 我为斯利姆上了一些课。但是我不能在我的项目中自动加载它们 / composer.json 作曲家法尔 卖主 配置 someapiparams.php database.php cache.php general.php 公开的 index.php 模型 图书馆 福 苗条的 Config.php Cache.php /composer.json: "autoloa

我是作曲家和自动装弹手的新手。我认为我还缺乏文件组织策略。 我正试图在slimframework上建立一个新项目。 我为斯利姆上了一些课。但是我不能在我的项目中自动加载它们

/

  • composer.json
  • 作曲家法尔
  • 卖主
  • 配置
    • someapiparams.php
    • database.php
    • cache.php
    • general.php
  • 公开的
    • index.php
  • 模型
  • 图书馆
    • 苗条的
      • Config.php
      • Cache.php
/composer.json:

"autoload": {
    "psr-0": {
        "Foo": "libraries/"
    }
}
<?php
class Config {
    /**
    * Loads a file based on $key param under ROOT . "/config",
    * if not already loaded. 
    * Then returns an array.
    */
    public static function get($key) {}

}
<?php
class Cache{
    /**
    * Initialize a caching engine defined in config file if not already done.
    * Then runs corrensponding engine methods for getting and setting.
    */
    public static function init() {
       $config = Config::get("cache");
       // initialize driver.
    }
    public static function __get($key) {}
    public static function __set($key, $value, $params) {}

}
require ROOT."/vendor/autoload.php";
$app = new Slim\Slim();
var_dump(Config::get("database")); exit;
//var_dump(Foo\Slim\Config::get("database")); exit;
//var_dump(Slim\Config::get("database")); exit;
/libraries/Foo/Slim/Config.php:

"autoload": {
    "psr-0": {
        "Foo": "libraries/"
    }
}
<?php
class Config {
    /**
    * Loads a file based on $key param under ROOT . "/config",
    * if not already loaded. 
    * Then returns an array.
    */
    public static function get($key) {}

}
<?php
class Cache{
    /**
    * Initialize a caching engine defined in config file if not already done.
    * Then runs corrensponding engine methods for getting and setting.
    */
    public static function init() {
       $config = Config::get("cache");
       // initialize driver.
    }
    public static function __get($key) {}
    public static function __set($key, $value, $params) {}

}
require ROOT."/vendor/autoload.php";
$app = new Slim\Slim();
var_dump(Config::get("database")); exit;
//var_dump(Foo\Slim\Config::get("database")); exit;
//var_dump(Slim\Config::get("database")); exit;

找不到配置类时出错。

您忘记放置:

namespace Foo/Slim;
在/libraries/Foo/Slim/Cache.php的顶部(或者在代码示例中可能已经剪掉了它)


如果添加名称空间无法解决此问题,则应使用调试器逐步检查代码,并在Composer autoloader尝试加载类失败时准确查看其正在搜索的文件。

Right。当前类名为
\Config
,但文件的位置要求将其命名为
\Foo\Slim\Config
。添加一个名称空间会有帮助。我尝试将json、目录结构和类名等许多东西结合起来;我错过了名称空间声明。我真丢脸。谢谢。@WebolizeR您有什么建议?指向SplClassLoader类并不能解释其本身。