Aşağıdaki örnekte önce basit bir symfony vendor bundle yaratacağız ve daha sonra, onu composer ile ana uygulamamızda kullanmak için yükleyeceğiz.


Vendor bundle yaratma


Uygulama yükleme


Inanzzz-MBP:Documents inanzzz$ composer create-project symfony/framework-standard-edition say-hello

Bundle yaratma


Inanzzz-MacBook-Pro:say-hello inanzzz$ php app/console generate:bundle --namespace=Inanzzz/HelloBundle

Temizlik


Gereksiz olan dosya ve klasörleri sildikten sonra, elimizde aşağıdaki gibi bir klasör yapımız olacak.


say-hello
src
Inanzzz
HelloBundle
DependencyInjection
Configuration.php
InanzzzHelloExtension.php
InanzzzHelloBundle.php
.htaccess
.gitignore
composer.json
LICENSE
README.md

Composer.json yenileme


Dosyanın içeriğini aşağıdaki ile değiştirdikten sonra composer update komutunu çalıştırın.


{
"name": "inanzzz/sayhello",
"license": "MIT",
"type": "library",
"description": "Say Hello bundle",
"autoload": {
"psr-0": {
"Inanzzz\\HelloBundle": "src/"
}
},
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.6.*"
},
"minimum-stability": "stable"
}

.gitignore yenileme


/vendor/
/composer.phar
/composer.lock

Hello.php yaratma


# say-hello/src/Inanzzz/HelloBundle/Util/Hello.php

namespace Inanzzz\HelloBundle\Util;

class Hello
{
public function name($value)
{
return 'Hello '.$value.'!';
}
}

Hello.php için servis yaratma


# say-hello/src/Inanzzz/HelloBundle/Resources/config/services.yml

services:
inanzzz_hello.util.hello: #inanzzz_hello must match DependencyInjection/Configuration.php line $treeBuilder->root('xxxxxxxx');
class: Inanzzz\HelloBundle\Util\Hello

Mevcut yapı


Şu anda elimizde aşağıdaki gibi bir klasör yapısı olacak.


say-hello
src
Inanzzz
HelloBundle
DependencyInjection
Configuration.php
InanzzzHelloExtension.php
Resources
config
service.yml
Util
Hello.php
InanzzzHelloBundle.php
.htaccess
.gitignore
composer.json
LICENSE
README.md

Git repo yaratıp yayınlama


Öncelikle GitHub içine say-hello isminde bir repository yaratın ve daha sonra yerel uygulamanızda çalışmaya başlayın. Not: Aslında bu işlem ilk sırada yapılır.


Inanzzz-MBP:say-hello inanzzz$ git init
Inanzzz-MBP:say-hello inanzzz$ git add --all
Inanzzz-MBP:say-hello inanzzz$ git commit -m 'First commit'
Inanzzz-MBP:say-hello inanzzz$ git remote add origin git@github.com:Inanzzz/say-hello.git
Inanzzz-MBP:say-hello inanzzz$ git push -u origin master

Ana uygulama


Composer.json yenileme


Aşağıdaki parçaları mevcut olan içerik ile birleştirdikten sonra composer update inanzzz/sayhello komutunu çalıştırın. Görebileceğiniz gibi GitHub'daki repository linkinin ismi say-hello, vendor bundle ismi sayhello ile aynı değil ve de olmak zorunda da değil zaten.


{
...
"repositories": [
{
"type": "git",
"url": "git@github.com:Inanzzz/say-hello.git"
},
...
],
"require": {
...
"inanzzz/sayhello": "dev-master"
...
},
"minimum-stability": "stable"
...
}

Eğer isterseniz aşağıdaki versiyonu kullanabilirsiniz.


{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/Inanzzz/say-hello.git"
}
}

Eğer repositories tanımlamasını tamamen kaldırmak isterseniz, yeni vendorunuzu Packagist adresine yüklemeniz lazım. Vendor bundle üzerinde değişik yapılırsa, Packagist hesabınıza login olup "Force Update" butonu ile değişiklikleri almanız lazım veya bir tane "auto update" görevi yaratabilirsiniz.


AppKernel.php yenileme


Yeni bundle kaydından sonra, yarattığınız servise inanzzz_hello.util.hello ismini kullanarak ulaşabilirsiniz.


new Inanzzz\HelloBundle\InanzzzHelloBundle(),