4

Silex、PHP マイクロ フレームワークで遊んでいます。現時点では、自分のクラスをロードしようとしていますが、うまくいきません。Silex へのロードがどのように機能するのか、誰かが少し説明してくれるかもしれません。

私のプロジェクト構造は次のようになります。

app/
vendor/
web/
tests/
bootstrap.php
composer.json
composer.lock

Controller\User (namespace here)からクラスをロードしたいとしましょう/app/MainController.php

どうやってやるの?いくつかの記事 (Composer または Symfony の UniversalClassLoader を介してロード) を閲覧し、いくつかの指示に従いましたが、それでも機能しません。

誰かが私に手を差し伸べてくれたら、感謝します。

4

3 に答える 3

12

次のように、Silex クラスを bootstrap.php にロードすると仮定します。

// bootstrap.php
require_once __DIR__.'/vendor/autoload.php';

その場合、このコードを次のコードに置き換えます。

// bootstrap.php
$loader = require __DIR__.'/vendor/autoload.php';
$loader->add(YOUR_NAMESPACE, DIRECTORY_OF_THE_NAMESPACE);

例:

// bootstrap.php
$loader = require __DIR__.'/vendor/autoload.php';
$loader->add('Tutorial', __DIR__.'/src');

必要に応じて、複数の名前空間を追加できます。名前空間ごとに add メソッドを呼び出すだけです。クラスファイルを保存します
src/名前空間ごとに、この名前空間のクラス ファイルを含むフォルダーを作成します。ファイルは、クラスと同じ名前にする必要があります。

MyNamespace\MyClass => src/MyNamespace/MyClass.php
MyNamespace\SubNamespace\SubClass => src/MyNamespace/SubNamespace/SubClass.php

すべてのクラス ファイルで、最初の行に関連する名前空間を設定する必要があります。

// src/Tutorial/DemoController.php
namespace Tutorial;
class DemoController{
// class definition goes here..
}

これで、bootstrap.php を含むすべてのファイルでクラスにアクセスできるようになりました。
/app/MainController.php で、次のように独自のクラスにアクセスできるようになりました。

// app/MainController.php
use Tutorial\DemoController;
$foo = new DemoController();

この解決策は私にとってはうまくいきました。それがうまくいくことを願っています。

于 2013-04-10T12:10:44.977 に答える
3

Silex のドキュメントには、削除された registerNamespace 関数がまだ含まれているため、私も同じことを探していました。

ここで本当に素晴らしい答えを見つけました

つまり、 composer.jsonの「autoload」セクションに「psr-0」を追加するだけです。

例 composer.json:

{
    "require": {
        "silex/silex": "~1.3",
        "doctrine/dbal": "~2.2"
    },

    "autoload": {
        "psr-0": {
            "MyApp": "src/"
        }
    }
}

Composer Autoloader を更新してください (「composer install」または「composer update」)。

于 2015-07-02T12:31:00.963 に答える
2

2014 年 10 月の時点で、独自のクラスを silex にオートロードする最良の方法は、PSR-4(の代わりに)アプリケーション ルートでファイルを使用してPSR-0オートロードを使用することです。Composercomposer.json

{
    "require": {
        "silex/silex": "~2.0",
    },
    "autoload": {
        "psr-4": {"Vendor\\Namespace\\": "path/to/src/"}
    }
}

編集後、次のcomposer.jsonことを行う必要があります。

composer update

ターミナルを使用して、プロジェクトのルート ディレクトリで。

于 2016-06-14T11:20:55.647 に答える