エンティティマッピング用の独自のcommon
バンドルと、いくつかの個別のアプリ内で使用するサービスを作成することを検討しています。バンドルは、変更、実行、組み込み、テストが簡単でなければなりません。 バンドルを構築するためのベストプラクティス については知っていますが、開発に関してどのgit
戦略を使用するのかわかりません。
common
バンドルをプロジェクト全体として作成し、リポジトリ全体をgitサーバーにコミットする必要がありますか、それともcommon
バンドルのルートに対してのみソース管理を開始し、そのコンテンツのみをプッシュする方がよいでしょうか?このアプローチはgithub
で利用可能なバンドルにありますが、そのようにバンドルを開発する簡単で快適な方法はわかりません。
php composer.phar create-project symfony/framework-standard-edition demo/ 2.4.1
cd demo
(たとえば、src/Company/DemoBundle
)
php app/console generate:bundle
cd src/Company/DemoBundle/
src/Company/DemoBundle
でgithubリポジトリを初期化しますgit init
touch README.md
git add .
git commit -m "initial commit"
git remote add Origin https://github.com/YourAccount/DemoBundle.git
git Push -u Origin master
src/Company/DemoBundle/composer.json
:
{
"name" : "company/demobundle",
"description" : "A demo bundle",
"type" : "symfony-bundle",
"authors" : [{
"name" : "demo",
"email" : "[email protected]"
}],
"keywords" : [
"demo bundle"
],
"license" : [
"MIT"
],
"require" : {
},
"autoload" : {
"psr-0" : {
"Company\\DemoBundle" : ""
}
},
"target-dir" : "Company/DemoBundle",
"repositories" : [{
}],
"extra" : {
"branch-alias" : {
"dev-master" : "some_version-dev"
}
}
}
これで、バンドルの基本構造ができました。
composer.json:
[...]
"require" : {
[...]
"company/demobundle" : "dev-master"
},
"repositories" : [{
"type" : "vcs",
"url" : "https://github.com/Company/DemoBundle.git"
}],
[...]
行う:
curl -sS https://getcomposer.org/installer | php
php composer.phar update company/demobundle
app/AppKernel:
new Company\DemoBundle\CompanyDemoBundle(),
src/Company
フォルダーに複製してから、手動でインストールできます最初のプロジェクトでバンドルを開発およびテストし、2番目のプロジェクトでgithubおよびcomposerで使用できます。
知っておくべき重要な点は、/ vendorからリポジトリにコミットできることです。実際、composerは、作業コンテキストで作業できるように、パッケージのレポを参照する各バンドル(またはパッケージ)に対して「composer」と呼ばれる2番目のリモートを作成します。すべてのプロジェクトについてcomposer.jsonにパッケージを登録し、/vendor/MyCompany/MyBundle
、任意のプロジェクトから。
証拠として、単にgit remote -v
ベンダーの任意のバンドルから。
悪い習慣は、バンドルを別のプロジェクトと見なし、それとシンボリックリンクを作成することです。これが悪い習慣である主な理由は、バンドルで依存関係を宣言できないことです。さらに、プロジェクトの展開には多少の困難が伴います。
Symfony4では、generate:bundle
コマンドは使用できなくなりました。代わりに、 このチュートリアル に従うことができます。
最初にプロジェクトを作成します:
composer create-project symfony/website-skeleton my-project
次に、my-project/lib/AcmeFooBundle/src
ディレクトリを作成します。こちらがバンドルのライブです。このディレクトリの名前空間はAcme\AcmeFooBundle
になるため、lib/AcmeFooBundle/src/Service/Foo.php
でサービスクラスを作成すると、その名前空間はAcme\AcmeFooBundle\Service
になります。
ここで、composer= autoloaderにその新しいディレクトリで新しいクラスを探すように指示する必要があるため、composer.json
autoload
セクションを編集する必要があります。
"autoload": {
"psr-4": {
"Acme\\AcmeFooBundle\\": "lib/AcmeFooBundle/src/",
}
},
composer dump-autoload
を実行します。
これで、バンドルクラスをconfig/bundles.php
に追加するだけで済みます。
return [
...
Acme\AcmeFooBundle\AcmeFooBundle::class => ['all' => true],
];
バンドルから設定をロードするための依存性注入。
依存性注入を追加する前にサービスを確認する場合は、config/services.yml
でサービスを自動配線できます。
services:
...
Acme\AcmeFooBundle\Services\Foo: ~
それで全部です。 ベストプラクティス に従って、コーディングを続けます。
PS: Symfonyの再利用可能なバンドルを開発するためのいくつかのヒント の投稿を公開しました。