2013-05-12 109 views
0

IAM制定个人use.Iam小PHP框架尝试自动装载类与UniversalClassLoaderwich在Symfony.But用来当我尝试使用一些clases我得到错误Symfony的类加载器不会加载

Fatal error: Class 'Controller' not found in /opt/lampp/htdocs/web/globeapi/Start.php on line 14

这里是Start.php的文件代码。

require('../libraries/loader/Loader.php'); 

use Symfony\Component\ClassLoader\UniversalClassLoader; 

$auto = require('../config/Auto.php'); 


$Loader = new UniversalClassLoader(); 
$Loader->registerNamespaces($auto); 
$Loader->register(); 


Controller::test(); 

这里是控制器类的代码

namespace Libraries\Controller; 

class Controller 
{ 
    function Controller() 
    { 

    } 

    public static function test() 
    { 
     echo 1; 
    } 
} 

这里是Auto.php文件至极返回的类自动加载阵列的代码。

return array(
     'Libraries\Controller'  => '../libraries/controller/Controller.php', 
     'Libraries\Module'   => '../libraries/module/Module.php', 
     'Libraries\View'   => '../libraries/view/View.php', 
     'Libraries\Sammy'   => '../libraries/sammy/Sammy.php', 
     'Libraries\Routes'   => '../config/Routes.php' 
); 
+0

确实\库\控制器::测试();工作? – herrjeh42 2013-05-12 08:36:18

+0

提示:使用通用类加载器不需要包含包含所有类和文件的数组。看看http://symfony.com/doc/current/components/class_loader.html – herrjeh42 2013-05-12 08:37:53

+0

以及\ Libraries \ Controller :: test();不工作 – 2013-05-12 08:42:33

回答

3

我的答案是使用当前版本的Symfony(2.2)和UniversalClassLoader。总体思路是遵循PSR-0标准,以便不必为每个文件定义映射条目。只需遵循简单的命名和位置约定,就可以找到你的课程 - 整洁,不是吗? :-)(注意目录和文件名都区分大小写)。

目录结构(供应商目录由作曲家创建)

app.php 
composer.json 
src 
    App 
    Libraries 
     Controller 
     Controller.php 
vendor 
    symfony 
    class-loader 
     Symfony 
     Component 
      ClassLoader 

composer.json

{ 
    "require": { 
     "symfony/class-loader": "2.2.*" 
    } 
} 

app.php中的含量:

require_once 'vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php'; 

use Symfony\Component\ClassLoader\UniversalClassLoader; 

$loader = new UniversalClassLoader(); 
$loader->registerNamespace('App', 'src'); 
$loader->register(); 

\App\Libraries\Controller\Controller::test(); 

最后的控制器类

//src/App/Libraries/Controller/Controller.php 
namespace App\Libraries\Controller; 

class Controller 
{ 

    public static function test() 
    { 
     echo 1; 
    } 
}