【初めてのSymfony2】Bundleをgenerateしてみる


(正直)あんまり乗り気ではないが、symfony2を取り扱ってみることにした時のメモ
このBundleってのが自分はまだしっくり来ないんだなー・・・・


## 前にやったこと

* [【初めてのSYmfony2】インストール編](http://qiita.com/ryurock/items/3176660c209afc65c10c)

## 環境

[vagrant](https://www.vagrantup.com/)で構築

* Guest OS
	* CentOS6.4 x86

## 事前準備に必要なもの

* PHP5.3以上
	* 自分は PHP 5.6.0でトライ
	* [phpenv](https://github.com/CHH/phpenv)で入れたい方は[virtualbox(centos)でphpenv+php-buildインストールメモ(5.3,5.4変更確認まで)](http://qiita.com/ryurock/items/7d031440bb174a55a6a1)を参考に入れてください
* [composer](https://getcomposer.org/)
	* 入れていない方は[composerを使ってみた時のメモ](http://qiita.com/ryurock/items/43beef25d26966fff8cc)を参考にでもしてください

## 出来上がるもの

* [ryurock/leaning-symfony2:create_bundle](https://github.com/ryurock/leaning-symfony2/tree/create_bundle)

## 参考にしたサイト

* [symfony公式](http://symfony.com/)
* [Symfony2 ドキュメント日本語版](http://docs.symfony.gr.jp/symfony2/)
* [symfony公式 > Generating a New Controller](http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_controller.html)


## generate:bundleを使って見る

その前にhelpを読んでみる

```shell:/path/to/leaning-symfony2
php app/console generate:bundle --help
```

helpを読んでなんとなく掴めてきたので作ってみる

## 作るBundle

管理画面用のログイン画面のBundleを作る


```shell:/path/to/leaning-symfony2
php app/console generate:bundle

#namespace
Bundle namespace: Admin/LoginBundle

#bundle名
Bundle name [AdminLoginBundle]:LoginBundle

#Bundleのディレクトリ
Target directory [/synced/leaning-symfony2/src]:

#configの種類
Configuration format (yml, xml, php, or annotation): annotation

# 他のbundleの構成の必要なディレクトリも作成するか？
Do you want to generate the whole directory structure [no]?
 "annotation" format.

# bundleの作成の最終確認
Do you confirm generation [yes]?

# kernelをupdateするか?
Confirm automatic update of your Kernel [yes]?
# routingをupdateするか？
Confirm automatic update of the Routing [yes]?
```

ざっとこんな感じで作成した

## どんなものが作成されたのか確認してみた

generateコマンドってのが何をつくるのかがよくわからないので確認してみる

```shell:/path/to/leaning-symfony2
git st
# On branch add_bootstrap
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   app/AppKernel.php
#	modified:   app/config/routing.yml
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	src/Admin/
no changes added to commit (use "git add" and/or "git commit -a")
```


```app/AppKernel.php``` と ```app/config/routing.yml``` が変更されて ```src/Admin```が追加されている


### app/AppKernel.php

```shell:/path/to/leaning-symfony2
git diff app/AppKernel.php
diff --git a/app/AppKernel.php b/app/AppKernel.php
index bccaf38..9536966 100644
--- a/app/AppKernel.php
+++ b/app/AppKernel.php
@@ -17,6 +17,7 @@ class AppKernel extends Kernel
             new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
             new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
             new AppBundle\AppBundle(),
+            new Admin\LoginBundle\LoginBundle(),
         );

         if (in_array($this->getEnvironment(), array('dev', 'test'))) {
```

``` app/AppKernel.php ``` はクラスローダー的な役割なのかな

### app/config/routing.yml

```shell:/path/to/leaning-symfony2
git diff app/config/routing.yml
diff --git a/app/config/routing.yml b/app/config/routing.yml
index 8eadc31..cd7a99d 100644
--- a/app/config/routing.yml
+++ b/app/config/routing.yml
@@ -1,3 +1,8 @@
+admin_login:
+    resource: "@LoginBundle/Controller/"
+    type:     annotation
+    prefix:   /
+
 app:
     resource: "@AppBundle/Controller/"
     type:     annotation
```

resourceの設定が追加されたみたい

### src/Admin

```shell:/path/to/leaning-symfony2
rc/Admin/
└── LoginBundle
    ├── Controller
    │   └── DefaultController.php
    ├── DependencyInjection
    │   ├── Configuration.php
    │   └── LoginExtension.php
    ├── LoginBundle.php
    ├── Resources
    │   ├── config
    │   │   └── services.xml
    │   └── views
    │       └── Default
    │           └── index.html.twig
    └── Tests
        └── Controller
            └── DefaultControllerTest.php
```

MVCとそれっぽい設定ファイル郡が追加されたみたい

### 最後に

BUndle直下にある(今回で言うと ``` src/Admin/Bundle/LoginBundle/AdminLoginBundle.php``` が何に使っていいのかよくわからない・・・・