如何将个人供应商添加到Symfony 2项目?

时间:2013-03-06 10:24:04

标签: symfony

我是Symfony 2的新手。我想在我的项目中添加类似库的类,但我不知道如何。

假设我有2个A和B类。

我将他们定位在这个位置:vendor / my_vendor_name / xxxx / A.php和vendor / my_vendor_name / xxxx / B.php

在每个类中我定义了相同的命名空间:

namespace my_vendor_name/xxxx

现在我想通过调用:

在我的包中使用这两个类
use my_vendor_name/xxxx/A or my_vendor_name/xxxx/B

但是就像我的命名空间不存在(找不到类)...也许我必须在某处声明这些命名空间,以便注册它们。

我的app / autoload.php

<?php

use Doctrine\Common\Annotations\AnnotationRegistry;

$loader = require __DIR__.'/../vendor/autoload.php';

// intl
if (!function_exists('intl_get_error_code')) {
require_once     __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';

$loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');

}

AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

return $loader;

2 个答案:

答案 0 :(得分:2)

深入了解文档。 The ClassLoader Component部分对此进行了详细解释。

来自文档,

如果要自动加载的类使用名称空间,请使用registerNamespace()registerNamespaces()方法。 对于遵循PEAR命名约定的类,请使用registerPrefix()registerPrefixes()方法。

注意,文档是full of examples,符合您的需求(将外部类或PHP库添加到项目中)

此外,请查看autoload文档的Composer部分。

答案 1 :(得分:2)

这不是正确的方法。

您按此顺序:

  • src/目录
  • 下创建一个包
  • 将您的论坛注册到app/AppKernel.php档案
  • 在您的论坛下创建课程
  • 在任何地方使用这些课程

真实的例子:

捆绑创建

src/目录下创建一个目录。这个dir将包含你所有的捆绑包。按照惯例,此目录应该是您的“公司”名称(对于我们的示例,假设它是 Foo )。

之后,为您的包创建一个目录,其中包含您的包的名称。对于我们的例子。我们决定将其称为 FooBundle

因此,您将拥有此目录树:src/Foo/FooBundle/

进入FooBundle/您必须创建一个用于捆绑注册的文件。此文件在此处报告:

<?php

namespace Foo\FooBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class FooBundle extends Bundle
{
}

文件名为FooFooBundle.php

注册您的包

进入app/AppKernel.php文件并添加此行

public function registerBundles()
{
    [...]
    $bundles = array(
                   [...]
                   new Foo\FooBundle\FooFooBundle());
    [...]

恭喜!您的捆绑包现已注册!

创建课程

只需在您的包中创建您的类。我建议你将它们打包到Core或任何你想要的目录

使用您的班级

假设您已将一个名为A的类定义为全新的捆绑包。

使用它非常简单:

use Foo\FooBundle\Core\A

进入你想要使用它的文件

所有人现在都应该工作

<小时/>

小注:

插入到src中的bundle与插入到vendor 1中的bundle不同,因为你的bundle(src one)仅被你用于你的项目。供应商捆绑包是您在项目中使用的其他捆绑包。行为(如何创建包,如何注册和使用它)完全相同。

小注2:

如果你必须使用外部库或“旧”php普通类,艾哈迈德的答案给你一个很好的起点