0

SymfonyCastsの優れたコースに従って、再利用可能なカスタム バンドルを作成しようとしています。しかし、composer でインストールしようとすると、symfony のレシピが適用されません。たとえば、バンドルが にまったく登録されていませんconfig/bundles.php。composer.jsonに設定するという単純な事実がレシピを自動的に実行するはずだとどこでも読み"type": "symfony-bundle"ましたが、私の場合はそうではありません。

奇妙な事実は、アンインストール時にレシピ適用されることです。例 :

composer remove chinaskijr/mybundle版画

Symfony operations: 1 recipe (769c88112592ff8a35644e9520929f21)
  - Unconfiguring chinaskijr/mybundle (>=v2.x-dev): From auto-generated recipe

でも何もついてないcomposer require chinaskijr/mybundle:*@dev

SymfonyCasts コースでは、「パス」リポジトリからインストールする必要がありますが、プライベート Gitea リポジトリでも試してみましたが、結果は同じでした。

また、バンドルを手動で登録したときに問題が発生したとは思いません。彼のコードは正しく機能しています。

ここに私のcomposer.jsonがあります

{
    "name": "chinaskijr/mybundle",
    "type": "symfony-bundle",
    "description": "A bundle for practice",
    "version": "v2.x-dev",
    "authors": [
        {"name": "chinaskijr", "role": "Owner"},

    ],
    "require": {
        "php": "^7.2"
    },
    "autoload": {
        "psr-4": {"chinaskijr\\mybundle\\": ""}
    }
}

回答ありがとうございました。

編集: さまざまなプロジェクトにインストールしようとしたため、ここから問題が発生したかどうかはわかりませんが、機能しません。これは、たとえばsymfony/skeletonにあります。

{
    "type": "project",
    "license": "proprietary",
    "repositories": [
        {"type": "path",  "url": "../mybundle"}
    ],
    "require": {
        "php": "^7.2",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "chinaskijr/mybundle": "*@dev",
        "symfony/console": "5.0.*",
        "symfony/dotenv": "5.0.*",
        "symfony/flex": "^1.3.1",
        "symfony/framework-bundle": "5.0.*",
        "symfony/yaml": "5.0.*"
    },
    "require-dev": {
    },
    "config": {
        "preferred-install": {
            "*": "dist"
        },
        "sort-packages": true
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Tests\\": "tests/"
        }
    },
    "replace": {
        "paragonie/random_compat": "2.*",
        "symfony/polyfill-ctype": "*",
        "symfony/polyfill-iconv": "*",
        "symfony/polyfill-php72": "*",
        "symfony/polyfill-php71": "*",
        "symfony/polyfill-php70": "*",
        "symfony/polyfill-php56": "*"
    },
    "scripts": {
        "auto-scripts": {
            "cache:clear": "symfony-cmd",
            "assets:install %PUBLIC_DIR%": "symfony-cmd"
        },
        "post-install-cmd": [
            "@auto-scripts"
        ],
        "post-update-cmd": [
            "@auto-scripts"
        ]
    },
    "conflict": {
        "symfony/symfony": "*"
    },
    "extra": {
        "symfony": {
            "allow-contrib": false,
            "require": "5.0.*"
        }
    }
}

EDIT2 : 構造があります。手動でアクティブ化すると、サービスが自動配線され、コンテナーからサービスにアクセスして構成を取得できます。すべての名前空間はchinaskijr\mybundle\、PSR-0 に従って接頭辞が付けられます。

.
├── composer.json
├── Controller
│   └── MyBundleController.php
├── DependencyInjection
│   ├── Configuration.php
│   └── MyBundleExtension.php
├── MyBundleBundle.php
├── README.md
└── Resources
    ├── config
    │   └── services.xml
    └── templates
        └── index.html.twig
4

2 に答える 2

0

最終的にgithubリポジトリのバージョンにタグを使い始めるまで、私は同じ問題を抱えていました.

index.json では、バンドルのバージョンは 1.0 です。

    "recipes": {
        "vendor/bundle": [
            "1.0"
        ]
    },

v1.0packagist がそれを見ることができるように、バンドルに git タグを作成しました。次のcomposer requireで、flex は最終的に、自動生成されたレシピを使用する代わりに私のレシピを実行しました。

Flex では、レシピをバンドルのバージョンに関連付ける必要があるようです。dev-main単純なバージョン名に頼ることはできないようです。

あなたの状況でうまくいきますか?それ以来、解決策は見つかりましたか?

于 2021-12-05T23:27:23.557 に答える