0

Symfony 2 は初めてです。プロジェクトにライブラリなどのクラスを追加したいのですが、方法がわかりません。

AとBの2つのクラスがあるとします。

私はそれらを次の位置に配置しました: vendor/my_vendor_name/xxxx/A.php および vendor/my_vendor_name/xxxx/B.php

各クラスで、同じ名前空間を定義しました:

namespace my_vendor_name/xxxx

を呼び出して、これらの 2 つのクラスをバンドルで使用したいと思います。

use my_vendor_name/xxxx/A or my_vendor_name/xxxx/B

しかし、名前空間が存在しない(クラスが見つからない)ようです...おそらく、それらの名前空間をどこかで宣言して登録する必要があります。

私のアプリ/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;
4

2 に答える 2

2

ドキュメントを詳しく見てみましょう。ClassLoader コンポーネントセクションで詳しく説明されています。

ドキュメントから、

自動ロードするクラスが名前空間を使用する場合は、registerNamespace()またはregisterNamespaces()メソッドを使用します。PEAR 命名規則に従うクラスの場合、registerPrefix()またはregisterPrefixes()メソッドを使用します。

ドキュメントには、ニーズに合った例がたくさんあります(外部クラスまたは PHP ライブラリをプロジェクトに追加する)。

また、Composerドキュメントのautoloadセクションを見てください。

于 2013-03-06T10:37:28.957 に答える
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 に挿入されたバンドルは、ベンダー 1 に挿入されたバンドルとは異なります。これは、バンドル (src 1) がプロジェクトでのみ使用されるためです。ベンダー バンドルは、プロジェクトで使用する別のバンドルです。動作(バンドルの作成方法、登録方法、使用方法)はまったく同じです。

リトルノート 2:

外部ライブラリまたは「古い」phpプレーンクラスを使用する必要がある場合は、Ahmedの回答が良い出発点になります

于 2013-03-06T10:37:39.403 に答える