【问题标题】:Symfony 2 - How to determine the namespace and Bundle name for autoload.php & Appkernel.phpSymfony 2 - 如何确定 autoload.php 和 Appkernel.php 的命名空间和 Bundle 名称
【发布时间】:2014-05-05 09:03:44
【问题描述】:

我是 symfony2 的新手,我找不到这个信息: 要注册位于我的供应商目录中的捆绑包,如何确定 autoload.php 和 Appkernel.php 的命名空间和捆绑包名称?

例如,我下载了 Luiggio 的 PHPExcel Bundle。我已经把它放在 vendorDir/ExcelBundle/

内容在哪里:

namespace Liuggio\ExcelBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class LiuggioExcelBundle extends Bundle
{
}

我应该在 Appkernel 和 namespace.php 中添加哪些行? 这和这不起作用:

new Liuggio\ExcelBundle\LiuggioExcelBundle()
//'Liuggio\\ExcelBundle' => array($vendorDir. '/PHPExcel'),

我根本无法使用 composer 或 github repo,我所在的代理和限制太多。

【问题讨论】:

    标签: symfony namespaces bundle composer-php


    【解决方案1】:

    您不应手动将捆绑包放置在您的vendor 目录中。让 Composer 为您完成这项工作。 Composer 不仅知道供应商库/包的位置,它还会将它们添加到您的自动加载文件中并执行一些其他自动化任务。

    要告诉 Composer 需要哪些库,您应该将它们添加到您的 composer.json

        "require" : {
            (...)
            "liuggio/ExcelBundle": "~2.0"
        },
    

    接下来,使用命令行,运行composer update 命令:

    $ php composer.phar update
    

    (如果您的项目目录中没有文件composer.phar,但您已全局安装了 Composer,请使用以下内容:)

    $ composer update
    

    这将告诉 Composer 自动下载所需的依赖项、更新自动加载脚本等。完成后,您就可以开始了。

    如果您无法在服务器上使用 Composer,请在上传文件之前在本地运行它(尽管我强烈建议您转移到允许您使用 Composer 的服务器)。

    您尝试添加到 AppKernel.php 的行是正确的,但它仅在运行 Composer 后才有效(或者您确实必须下载文件并手动更新自动加载器,但我强烈建议不要这样做)。

    编辑

    如果实在无法使用 Composer,请执行以下操作:

    将ExcelBundle的文件放在以下目录:

    vendor/liuggio/ExcelBundle/Liuggio/ExcelBundle
    

    您在AppKernel.php 中的线路已经正确。

    将此行添加到autoload_namespaces.php:

    'Liuggio\\ExcelBundle' => array($vendorDir . '/liuggio/ExcelBundle'),
    

    最后但并非最不重要的一点是,向您的系统管理员抱怨他愚蠢的安全措施使您无法完成工作。

    【讨论】:

    • 非常感谢您的详细回答,Nic。你所描述的,是我一开始尝试的,因为我清楚地明白使用 composer 管理依赖项是最佳实践。但是,我再次这样做是为了准确地显示错误消息,这是我的问题(编辑:在服务器和本地:D):[Composer\Downloader\TransportException] 无法下载“packagist.org/packages.json”文件( HTT P/1.1 404 未找到)
    • 你试过this吗?
    • 无论如何,我建议尝试解决这个问题,而不是不使用 Composer。
    • 我已经尝试过设置 HTTP_PROXY env var,就像我通常在 shell 控制台中所做的那样。但它也失败了,因为我没有代理的确切 URL,还有更多不仅仅是一个代理通过(高安全区域)。我需要的是我必须放入 autoload_namespaces.php 的行的合成器......因为我现在只是随机尝试。如果有人知道:physical: ./vendor/ExcelBundle/LiuggioExcelBundle.php ./app/AppKernel.php: new Liuggio\ExcelBundle\LiuggioExcelBundle() and ./vendor/composer/autoload_namespace.php: 'Liuggio' => array($vendorDir. '/ExcelBundle'),
    • 在这种情况下,将捆绑文件放在vendor/liuggio/ExcelBundle,而不仅仅是vendor/ExcelBundle。并相应地编辑autoload_namespace.php(请参阅更新的答案)。
    【解决方案2】:
    new Liuggio\ExcelBundle\LiuggioExcelBundle(), 
    

    在 AppKernel 中应该可以正常工作。 这是 LuiggioExcelBundle 类的命名空间 + 类名。看看你的bundle是怎么加载的,都是一样的。

    你的错误是什么?

    你说的是 vendorDir/ExcelBundle/ 但它的 vendor/ExcelBundle 对吗?

    namespace.php 是什么意思? :o

    https://github.com/liuggio/ExcelBundle ==>那里的自述文件很容易理解,应该对你有帮助。

    对于您的“代理和限制”,composer 是一个强大的工具,我可以帮助您使用它。下载这个软件,免费版就够了http://www.frozenway.com/(如果你看不懂法文,在头的第一个输入是翻译网站,英文是英文)有了这个,你就没有任何端口限制了。

    【讨论】:

    • 我的 app_dev.php 主页上的准确错误:FatalErrorException: Error: Class 'Liuggio\ExcelBundle\LiuggioExcelBundle' not found in D:\Documents and Settings\T0148533\Mes Documents\EasyPHP-DevServer-13.1VC9\data\localweb\projects\Symfony\app\AppKernel.php line 27 是的,很抱歉它的供应商/等...因为供应商/作曲家/autoload_namespace.php 中的 var $vendorDir 写了 vendordir 不,我怀疑你可以对我的代理做任何事情。感谢您的提议,但您提供的链接(frozenway)也被代理阻止了。 Dommage, je suis français :D.谢谢你的助手。
    • 您的代理似乎很棒 :) Composer 正在生成您的包的自动加载类。在vendors/composer/autload_namespaces.php 像这样:'FOS\\UserBundle' => array($vendorDir .'/friendsofsymfony/user-bundle'),所以试试'Liuggio\\ExcelBundle' => array($vendorDir.' /ExcelBundle'),
    • 老实说,我公司的代理非常棒,没有一个广告或可疑请求通过。我需要的是我必须放入 autoload_namespaces.php 的行的合成器......因为我现在只是随机尝试。如果有人知道:physical: ./vendor/ExcelBundle/LiuggioExcelBundle.php ./app/AppKernel.php: new Liuggio\ExcelBundle\LiuggioExcelBundle() and ./vendor/composer/autoload_namespace.php: 'Liuggio' => array($vendorDir. '/ExcelBundle'),
    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多