6

我想知道在 symfony2 中包含 3rd 方 php 文件的最佳方法是什么。我正在使用不同的 php - ajax 包在我的 symfony2 应用程序中上传文件。该软件包为我提供了一些我需要在我的 symfony 控制器中使用的 php oops 代码。我正在我的控制器中创建该代码的对象。所以我想知道我可以把第三方代码或文件放在哪里,以及如何在我的 symfony2 控制器中包含或创建该代码的对象。我们是否也在 symfony2 中使用 require 或 include 。如果是这样,那是唯一的方法。

4

2 回答 2

7

我不太确定尝试将命名空间添加到第三方库。例如,Twig 不使用名称空间。而且真的没有必要。例如,考虑一个您想使用 Zend_Framework 1 库中的 PDF 组件的情况。

在您的 app/autoload.php 文件中,您可以执行以下操作:

$loader->registerPrefixes(array(
    'Twig_Extensions_' => $ws . 'Symfony/vendor/twig-extensions/lib',
    'Twig_'            => $ws . 'Symfony/vendor/twig/lib',
    'Zend_'            => $ws . 'ZendFramework-1.0.0/library',
));

// And since Zend internally uses require/include we need to set an include path
ini_set('include_path','.' .

    PATH_SEPARATOR . $ws . 'ZendFramework-1.0.0/library'

);

此时,我们应该能够在控制器内创建第三部分对象,同时让自动加载系统负责查找和包含类:

    $page = new \Zend_Pdf_Page(\Zend_Pdf_Page::SIZE_A4);
    $doc->pages[] = $page;

    $font1 = \Zend_Pdf_Font::fontWithName(\Zend_Pdf_Font::FONT_HELVETICA);
    $font2 = \Zend_Pdf_Font::fontWithName(\Zend_Pdf_Font::FONT_COURIER_BOLD);

您必须使用 \ 来解决缺少命名空间的问题。

这个答案确实假设您的第 3 部分库遵循或多或少的标准类命名约定。如果它有自己的自动加载功能,那么也只需从 autolaod.php 调用它。如果您根本不想使用自动加载,那么只需设置包含路径并包含。

于 2012-04-04T13:08:49.623 回答
3

文档详细解释了目录结构。

基本上,您可以将它们放在您想要的任何位置,但为了保持一致性和遵循最佳实践,您应该将您的第三方库放在vendor/目录中。

您可以将相关文件包含在命名空间中。

于 2012-04-04T09:16:04.160 回答