Symfony ClassLoader 不会加载 [英] Symfony ClassLoader won't load

查看:34
本文介绍了Symfony ClassLoader 不会加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个供个人使用的小型 php 框架.我正在尝试使用 Symfony 中使用的 UniversalClassLoader 自动加载类,但是当我尝试使用这些类时出现错误

I'm developing a small php framework for personal use. I am trying to autoload classes with UniversalClassLoader which is used in Symfony, but when I try to use some these classes I got error

致命错误:在第 14 行的/opt/lampp/htdocs/web/globeapi/Start.php 中找不到Controller"类

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();

这是Controller类的代码

Here is code of Controller class

    namespace Libraries\Controller;

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

这里是 Auto.php 文件的代码,它返回用于自动加载的类数组.

here is code of Auto.php file which returns array of classes for autoloading.

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

推荐答案

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

My answer is using the current version of Symfony (2.2) and the UniversalClassLoader. The general idea is to follow the PSR-0 standard so that you don't have to define a mapping entry for each file. Just by following simple naming and location conventions your classes will be found - neat, isn't it? :-) (note that both directory and file names are case sensitive).

目录结构(vendor目录由composer创建)

The directory structure (the vendor directory is created by composer)

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;
    }
}

这篇关于Symfony ClassLoader 不会加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆