1

以前にも同様の質問をしましたが、正解がありませんでした。うまく説明できていなかったのかもしれません。

symfony プロジェクトに追加したい独自のクラスが 2 つあります。

seculibs/collections/A.phpそしてseculibs/collections/B.php(それはgithub上ではなく、ローカルです)。

vendor フォルダーに seculibs フォルダーを追加し、symfony にクラスをロードするように依頼します。

明らかにすべてがapp/autoload.php

私はこれをしても大丈夫だと思っていましたが、そうではありません:

$loader->add('seculibs/collections',__DIR__ . '/../vendor/seculibs/collections/');

まだクラスを見つけることができません。

誰かが私に何をすべきか正確に教えてもらえますか? 私はSymfony 2.3.6を使用しています

これは私が扱っているクラスではないので、とそのメソッドcomposer.jsonのどちらにも言及しないでください。UniversalClassLoaderregisterNamespacesautoload.php

4

3 に答える 3

1

だから私は正しい構文を見つけました...それは他の人を助けるでしょう

$loader->add('seculibs\\collections',__DIR__ . '/../vendor');
于 2013-12-13T14:00:40.883 に答える
0

vendor/composer/ClassLoader.php を見てください。add メソッドが最初の引数としてプレフィックスを期待していることがわかります。クラスに名前空間がない場合は、空白のままにできます。

クラスが名前空間化されていないと仮定すると、次を使用します。

$loader->add(null,__DIR__ . '/../vendor/seculibs/collections/');

$a = new \A();

名前空間がある場合は、名前空間のプレフィックスを渡して追加します。

$loader->add('Cerad',__DIR__ . '/../vendor/seculibs/collections/');

namespace Cerad\Collections;
class A {}

$a = new Cerad\Collections\A();

もちろん、vendor ディレクトリの下に Cerad\Collections ディレクトリ構造も必要です。

==============================================

アップデート

/vendor/seculibs/collectionsA.php にある場合:

namespace seculibs\collections;

class A {

次に使用します。

$loader->add('seculibs',__DIR__ . '/../vendor/');

use seculibs\collections\A;

$a = new A();
于 2013-12-12T16:32:09.330 に答える
0

クラスを自動ロードする必要がありますか? プロジェクトで名前空間を指定するだけで独自のクラスをuse使用し、それらを使用したいファイル内のステートメントに含めます。たとえば、クラス内のカスタムの場所に配置したクラスがあります。私のプロジェクト、src/My/AppBundle/Utils/MyClass.php、およびMyClass.phpファイル内で、名前空間を指定しましたMy/AppBundle/Utils

コントローラーに、通常のuseステートメントを使用してそのクラスを含めます。

use My/AppBundle/Utils/MyClass.php
// .....

class MyController extends Controller {
    // ....
}

このようにして、名前空間を参照することで、アプリケーションのどこでもクラスを使用できます。このアプローチが予想とは異なることは承知していますが、うまく機能します。

アップデート:

ファイルをどこに置くかは問題ではありません。それらを vendor フォルダーに入れたい場合は、そこに置き、意味のある名前空間を与えてください。

だから多分あなたはこのようなものを持っています:

// in vendors/MyUtils/Classes/MyClass.php

namespace MyUtils/Classes

class MyClass {
    // ....
}

そして、use私が述べたようなステートメントでクラスを含めることができます。

于 2013-12-12T15:56:08.923 に答える