【问题标题】:Why can't symfony find my auto-loaded class?为什么 symfony 找不到我的自动加载类?
【发布时间】:2012-09-02 17:58:26
【问题描述】:

我正在尝试在我的 symfony 项目中使用 php-ga 第三方库。我已经在apps/<app>/lib 中安装了库,清除了缓存,第三方文件正如我所期望的那样出现在 config_autoload.yml.php 中:

'tracker' => 'C:/wamp/www/apps/api/lib/php-ga/GoogleAnalytics/Tracker.php',
'transaction' => 'C:/wamp/www/apps/api/lib/php-ga/GoogleAnalytics/Transaction.php',
...

但是,当我尝试在同一应用程序下的操作中使用类时,如下所示:

use UnitedPrototype\GoogleAnalytics;

public function executeNew(sfWebRequest $request)
{
   $tracker = new GoogleAnalytics\Tracker(...);
   ...

我收到一条错误消息,说它无法解析该类:

致命错误:在 C:\wamp\www\apps\api\modules\encoding\actions\actions.class.php 中找不到类“UnitedPrototype\GoogleAnalytics\Tracker”

我错过了什么?

【问题讨论】:

    标签: php symfony-1.4 autoload


    【解决方案1】:

    Symfony 的自动加载器无法正确加载命名空间类。我认为您应该将 ga lib 移动到 lib/vendor/php-ga 并在 config/ProjectConfiguration.class.php 中使用它自己的自动加载器(如 require_once __DIR__ . '/../lib/vendor/php-ga/autoload.php')。

    【讨论】:

    • 好消息!事实证明(我的版本)symfony 也期望自动加载器是数组,所以我不得不convert php-ga's autoloader to a class with a static method。之后它就起作用了 - 谢谢!
    • 很高兴能提供帮助,但我认为这与 symfony 无关。您应该将任何供应商库放在lib/vendor 下,默认情况下该目录被排除在 symfony 的自动加载机制之外(从 v1.3 开始)。
    • 我确实把它移到了lib/vendor,并且这些类从 config_autoload.yml.php 中消失了。然而,symfony 使用spl_autoload_functions() 枚举 sfAutoloadAgain.class.php 中的所有自动加载器并将值视为一个数组。
    • 嗨@ladenedge,我相信我和你有类似的问题,但我没有运行 symfony。当我遇到空白页时,你能告诉我你转换的 php-ga 的自动加载器到一个带有静态方法的类吗?
    猜你喜欢
    • 2012-05-10
    • 2013-12-30
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 2016-05-06
    • 2012-04-17
    • 2020-01-21
    相关资源
    最近更新 更多