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ファイルもいじらなくてはいけません。
何とかならないのかなぁ。


ということで、本日はここまでにしたいと思います。
もっと丁寧な解説がほしい人は公式サイトを見てね!


http://symfony.com/doc/current/book/page_creation.html

銀河の歴史がまた1ページ

現実と異なる世界にダイブして遊ぶという妄想をしたことはないだろうか。
この甘美なる妄想はこれまでも幾多のクリエイターが挑戦している題材でもある。


小説でいえば極限まで現実と同化したネットゲーム世界での冒険を描いたソードアート・オンラインがある。
映画では、最近リメイクされたトロンがダイブする作品だ。


Microsoftの最新の研究を見ると、我々がそういったことに親しむのは
さほど遠くない未来であると予感させる。

続きを読む

Symfony2がPR6でかっこいいディレクトリ構造に変わっていた


Symfony2がBundle指向なフレームワークとしたらApplicationフォルダは必要なんだろうか。

というのをネタに書こうかなとちょっと前から考えていて、
さあ書くべとついさっき調べたらPR6でsandboxのディレクトリ構造が変わっていた。

続きを読む

PHPExcelで印刷用の改ページ設定について

PHPExcelで出力しているExcel5形式のxlsファイルの印刷について。
データが少し縦長だったので区切りのよいところで、
改ページを設定しようと悪戦苦闘。

続きを読む

jqGridのサイズを動的に変更する

表示しているブラウザのウインドウサイズを変更したときに、
自動的にjqGridのサイズも変わってほしいときってありますよね。

  // #grid が対象のjqGridだとして

  $(window).bind('resize', function () {
      $('#gird').setGridWidth($(window).width() * 0.8)
                .setGridHeight($(window).height() * 0.8);
  }).trigger('resize');


ほかにもjqGridについて書いているのでよかったら見て行ってね!
jqGridについての記事一覧