【问题标题】:Managing Own Classes with Composer使用 Composer 管理自己的类
【发布时间】:2014-03-19 13:51:27
【问题描述】:

我是作曲家和自动加载器的新手。我想我也缺乏文件组织策略。 我正在尝试在 slimframework 上建立一个新项目。 我有一些 Slim 课程。但我无法在我的项目中自动加载它们。

/

  • composer.json
  • composer.phar
  • 供应商
  • 配置
    • someapiparams.php
    • 数据库.php
    • cache.php
    • general.php
  • 公开
    • index.php
  • 型号
    • 修身
      • Config.php
      • Cache.php

/composer.json:

"autoload": {
    "psr-0": {
        "Foo": "libraries/"
    }
}

/libraries/Foo/Slim/Config.php:

<?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) {}

}

/libraries/Foo/Slim/Cache.php:

<?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) {}

}

/public/index.php:

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;

错误是找不到配置类。

【问题讨论】:

    标签: composer-php autoload slim


    【解决方案1】:

    你忘了放:

    namespace Foo/Slim;
    

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

    如果添加命名空间不能解决问题,您应该使用调试器单步调试代码,并在 Composer 自动加载器尝试加载类但失败时准确查看它正在搜索的文件。

    【讨论】:

    • 对。目前类名是\Config,但是文件的位置要求它被命名为\Foo\Slim\Config。添加命名空间会有所帮助。
    • 我尝试在 json、目录结构和类名等中组合这么多东西;我错过了命名空间声明。真丢人。谢谢。
    • @WebolizeR 你有什么建议?指向一个 SplClassLoader 类本身并不能说明问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2021-04-30
    • 2016-03-06
    • 2013-11-08
    相关资源
    最近更新 更多