Symfony2 - creating own vendor bundle - project and git strategy

bundle, git, php, symfony

Solution

Create a new empty symfony project

php composer.phar create-project symfony/framework-standard-edition demo/ 2.4.1
cd demo

Generate a new bundle

(for example `src/Company/DemoBundle`)

php app/console generate:bundle
cd src/Company/DemoBundle/

Init your github repository in `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

Add a composer.json file

`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"
        }
    }
}

Now you have the base structure of your bundle

Use it in another project

composer.json:

    [...]
    "require" : {
        [...]
        "company/demobundle" : "dev-master"
    },
    "repositories" : [{
        "type" : "vcs",
        "url" : "https://github.com/Company/DemoBundle.git"
    }],
    [...]

Do:

curl -sS https://getcomposer.org/installer | php
php composer.phar update company/demobundle

app/AppKernel:

new Company\DemoBundle\CompanyDemoBundle(),

Work on it

- You can clone your DemoBundle in the `src/Company` folder, then manually install it

- You can use symlink

Conclusion

You can develop and test your bundle in your first project and use it with github and composer in your second project.

Problem

We're considering creating our own `common` bundle for entity mapping and services for use within few separate apps. A bundle should be easy to modify, run, include and test. I know about Best Practices for Structuring Bundles, but I don't know what `git` strategy to use when it comes to development. Should we create `common` bundle as a whole project and commit whole repository to our git server, or is it better to start source control only for root of `common` bundle and push only its contents? I see this approach in bundles available on `github`, but I don't know easy and comfortable way to develop bundles that way.

Original source