我是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;
答案 0 :(得分:2)
深入了解文档。 The ClassLoader Component部分对此进行了详细解释。
来自文档,
如果要自动加载的类使用名称空间,请使用registerNamespace()或registerNamespaces()方法。 对于遵循PEAR命名约定的类,请使用registerPrefix()或registerPrefixes()方法。
注意,文档是full of examples,符合您的需求(将外部类或PHP库添加到项目中)
答案 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)仅被你用于你的项目。供应商捆绑包是您在项目中使用的其他捆绑包。行为(如何创建包,如何注册和使用它)完全相同。
如果你必须使用外部库或“旧”php普通类,艾哈迈德的答案给你一个很好的起点