【问题标题】:Symfony ClassLoader won't loadSymfony ClassLoader 无法加载
【发布时间】:2013-05-06 12:10:28
【问题描述】:

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

致命错误:在第 14 行的 /opt/lampp/htdocs/web/globeapi/Start.php 中找不到类“控制器”

这是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类的代码

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

【问题讨论】:

标签: php symfony psr-0 spl-autoloader


【解决方案1】:

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

目录结构(vendor目录由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;
    }
}

【讨论】:

    猜你喜欢
    • 2019-09-25
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多