2014-02-19 63 views
1

我是新來的作曲家和自動加載機。我想我也缺乏文件組織策略。 我正在嘗試在slimframework上構建一個新項目。 我有一些Slim類。但我無法在我的項目中自動加載它們。使用Composer管理自己的類

/

  • composer.json
  • composer.phar
  • 廠商
  • 配置
    • someapiparams.php
    • database.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; 

錯誤是沒有找到配置類。

回答

2

你忘了放:

namespace Foo/Slim; 

在/libraries/Foo/Slim/Cache.php的頂部(或有可能已經剪斷它的代碼示例)。

如果添加命名空間不能解決問題,您應該使用調試程序遍歷代碼,並確切瞭解Composer自動加載器搜索的文件,當它嘗試加載類並失敗時。

+0

沒錯。目前,類名是'\ Config',但文件的位置要求它被命名爲'\ Foo \ Slim \ Config'。添加一個名稱空間將有所幫助。 – Sven

+0

我嘗試在json,目錄結構和Classnames等中結合了很多東西;我錯過了命名空間聲明。對我感到羞恥。謝謝。 – hctopcu

+0

這個怎麼樣:https://gist.github.com/wilmoore/426304 – WebolizeR