Symfony2のBeta1で初めてのBundleを作る
いつの間にやらSymfony2のbeta1が公開されていたので、
そろそろ何かを作って行きます。
最初はどうやってバンドルを作るかから始めます。
もちろん試行錯誤しながらです。
今回はRenmen/ShipmentBundleを作成します。
bundleは/src直下にvender/bundleという形式で作成します。
だから今回は以下のフォルダを作ります。
/src/Renmen/ShipmentBundle
受け入れ先ができたらいよいよファイルを作成します。
ファイルの命名はVenderBundle.phpです。
<?php // /src/Renmen/ShipmentBundle/RenmenShipmentBundle.php namespace Renmen\ShipmentBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class RenmenShipmentBundle extends Bundle { }
以上が、(おそらく)最小のBundleです。
もちろんこのままではただそこにあるだけなので、
今回はControllerを追加し、何かを表示したいと思います。
ControllerはVender/Bundle/Controllerフォルダに格納されます。
/src/Renmen/ShipmentBundle/Controller
次にファイル名ですが、なんでも良いです。
なぜかというと後述しますがrouting.ymlにて
ファイル名を指定するという作業があるためです。
ただまぁ、あまり変な名前をつけてもどうかと思うので
ここでは無難にShipmentControllerとしておきます。
<?php // /src/Renmen/ShipmentBundle/ShipmentController.php namespace Renmen\ShipmentBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; class ShipmentController extends Controller { /** * @extra:Route("/", name="_shipment") */ public function indexAction() { return new Response('This is a page made by ShipmentBundle'); } }
以上でbundleの作成は終わりですがSymfony2へbundleを追加するために
routing.yml、AppKernel.php、autoload.phpへ書き加えます。
/app/config/routing.yml
_shipment:
resource: "@RenmentShipmentBundle/Controller/ShipmentController.php"
type: annotation
prefix: /shipment
/app/AppKernel.php
<?php class AppKernel extends Kernel { public function registerBundles() { $bundles = array( (略...) new Acme\DemoBundle\AcmeDemoBundle(), new Renmen\ShipmentBundle\RenmenShipmentBundle(), );
/app/autoload.php
<?php $loader->registerNamespaces(array( (略...) 'Acme' => __DIR__.'/../src', 'Renmen' => __DIR__.'/../src', ));
さて、いよいよ /renmen/ へアクセスすると
This is a page made by RenmenShipmentBundle
と表示されるはずです。
と、ながながと説明しましたが、今の工程は
php app/console init:bundle "Renmen/ShipmentBundle" src
というコマンドによってかなり省略できます。
現状での不満点はautoloader.phpとAppKernel.phpの両者へ
変更を加えなければいけないところでしょうか。
routing.ymlも含めると3ファイルもいじらなくてはいけません。
何とかならないのかなぁ。
ということで、本日はここまでにしたいと思います。
もっと丁寧な解説がほしい人は公式サイトを見てね!