우리는 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/
github 저장소 초기화 src/Company/DemoBundle
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
composer.json 파일 추가
src/Company/DemoBundle/composer.json
:
{
"name" : "company/demobundle",
"description" : "A demo bundle",
"type" : "symfony-bundle",
"authors" : [{
"name" : "demo",
"email" : "demo@company.com"
}],
"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(),
일하는 중입니다
- DemoBundle을
src/Company
폴더 한 다음 수동으로 설치할 수 있습니다. - symlink를 사용할 수 있습니다.
결론
첫 번째 프로젝트에서 번들을 개발 및 테스트하고 두 번째 프로젝트에서 github 및 composer와 함께 사용할 수 있습니다.
답변
알아야 할 중요한 점은 / vendor에서 저장소에 커밋 할 수 있다는 것입니다. 실제로 composer는 작업 컨텍스트에서 작업 할 수 있도록 패키지의 리포지토리를 참조하는 각 번들 (또는 패키지)에 대해 “composer”라는 두 번째 원격을 만듭니다. 따라서 모든 프로젝트에 대해 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: ~
그게 다야. 모범 사례를 따르고 코딩을 계속하십시오.
추신 : Symfony 재사용 가능 번들을 개발하기위한 몇 가지 팁 이 포함 된 게시물을 게시했습니다 .