Symfony2-자체 공급 업체 번들 생성-프로젝트 및 Git 전략


79

우리는 common몇 가지 개별 앱 내에서 사용할 엔티티 매핑 및 서비스를위한 자체 번들을 만드는 것을 고려 하고 있습니다. 번들은 수정, 실행, 포함 및 테스트가 쉬워야합니다. 번들 구조화의 모범 사례에 대해 알고 있지만 git개발과 관련하여 어떤 전략을 사용 해야할지 모르겠습니다 .

common번들을 전체 프로젝트로 생성 하고 전체 저장소를 git 서버에 커밋 해야합니까 , 아니면 common번들의 루트에 대해서만 소스 제어를 시작 하고 해당 콘텐츠 만 푸시 하는 것이 더 낫 습니까? 에서 사용할 수있는 번들에서이 접근 방식을 볼 수 github있지만 그런 방식으로 번들을 개발하는 쉽고 편한 방법을 모르겠습니다.

답변:


177

비어있는 새 심포니 프로젝트 만들기

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와 함께 사용할 수 있습니다.


이것은 단계별로 좋은 방법이지만 Satis를 사용하여 개인 종속성을 서비스하는 것뿐만 아니라 자체 리포지토리에서 호스팅하는 것이 좋습니다. getcomposer.org/doc/articles/…
Boris Guéry

물론 github에 개인 저장소가있을 수도 있습니다.
Vincent Barrault 2014

좋은 대답 @VBee! 며칠 전에 같은 주제에 대해 조사했지만 비공개 Git 리포지토리 또는 로컬 리포지토리 (선호)를 사용하는 데 더 관심이있었습니다.
Jovan Perovic 2014

@VBee 훌륭한 튜토리얼, 감사합니다! 개인 저장소는 문제가되지 않습니다. 우리는 자체 git 서버를 가지고 있습니다. 문제는 솔루션을 사용하여 팀에서 공통 모듈을 개발하는 방법을 실제로 얻지 못한다는 것입니다. 모든 개발자가 새 sf2프로젝트 를 만들어야 하고clone 와이 저장소src/ 합니까? composer.lock메인 프로젝트 에 대해 그리고 팀 전체의 모든 라이브러리의 동일한 버전을 보장하기 위해 사용하는 것은 어떻습니까? 이를 수행하는 훌륭하고 효과적인 방법을 알고 있다면 답변에 추가하십시오. 감사! :)
ex3v 2014

3
그냥 오타 composer.phat는 composer.phar해야합니다
스테판 샴페인

16

알아야 할 중요한 점은 / vendor에서 저장소에 커밋 할 수 있다는 것입니다. 실제로 composer는 작업 컨텍스트에서 작업 할 수 있도록 패키지의 리포지토리를 참조하는 각 번들 (또는 패키지)에 대해 "composer"라는 두 번째 원격을 만듭니다. 따라서 모든 프로젝트에 대해 composer.json에 패키지를 등록하고 커밋하는 것이 좋습니다./vendor/MyCompany/MyBundle 하는 것이 좋습니다.

증거로 git remote -v공급 업체의 모든 번들에서 실행 하면됩니다.

나쁜 습관은 번들을 별도의 프로젝트로 간주하고 심볼릭 링크를 갖는 것입니다. 이것이 나쁜 관행 인 주된 이유는 번들로 종속성을 선언 할 수 없기 때문입니다. 또한 프로젝트 배포에 약간의 어려움이 있습니다.


자체 공급 업체 번들을 만들고 있습니다. 예를 들어이 번들을 GitHub에 넣고 다른 프로젝트에서 사용하고 싶습니다. 시작할 때 /src또는 /vendor디렉토리에 새 번들을 생성해야 합니까? 이 번들을 다른 프로젝트에 포함하면 포함 /vendor되지만 처음에는 어디에서 생성해야합니까?
Exit196

5
번들을 저장할 새 빈 프로젝트를 GitHub에 만듭니다. 그 안에 composer.json을 커밋하십시오. 번들의 이름과 설명 만있는 매우 간단한 composer.json을 커밋 할 수도 있습니다. 프로젝트로 돌아가서 새 번들에 요구 사항을 추가하고 composer update. 이제 공급 업체 폴더에 빈 번들이 표시되고 작업 할 수 있습니다. 번들을 공개하려면 Packagist에 추가하십시오.
flouflou2000

4

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 재사용 가능 번들을 개발하기위한 몇 가지 팁 이 포함 된 게시물을 게시했습니다 .


BTW, 재사용 가능한 번들을 개발하기위한 프로젝트도 만들었습니다. github.com/msalsas/symfony-bundle-skeleton
Manolo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.