2013年12月2日月曜日

iBatisでSQLのWHEREでINキーワードを使うには

iBatisでSQLのWHEREでINキーワードを使うには、parameterClassにListを使用する。 sqlMap
<select id="select-test" resultMap="MyTableResult" parameterClass="list">
select * from my_table where col_1 in
  <iterate open="(" close=")" conjunction=",">
   #[]#
  </iterate>
</select>
Java
List list = new ArrayList(3);
list.add("1");
list.add("2");
list.add("3");
List objs = sqlMapClient.queryForList("select-test",list);

2013年11月28日木曜日

Excelのセル内のテキストをもとにShapeを作り、グループ化するマクロ

Excelで作成したDBのテーブル定義書などをもとにER図をExcelのShapeを使って作成するのを補助するマクロです。 カラム名を選択した状態でこのマクロを実行すると、各セル単位でShapeを作成し、グループ化します。 ER図作成時にコネクタを任意のカラムに結合したのに、レイアウトの都合からShapeを移動するとコネクタの位置がずれるので作成しました。
Sub CellTextToShape()
'
' ER図作成補助 Macro
' 選択された範囲の文字列をテキストとするShapeを作成する
'
' Keyboard Shortcut: Ctrl+q
'
    Set xColumns = New Collection

    '外枠
    px = Selection.Left - 5
    py = Selection.Top - 5
    pw = Selection(1).Width + 10
    ph = Selection(1).Height * Selection.Count + 10
    Dim xParent As Shape
    Set xParent = ActiveSheet.Shapes.AddShape(Type:=msoShapeRectangle, Left:=px, Top:=py, Width:=pw, Height:=ph)
    xParent.Line.ForeColor.RGB = RGB(0, 0, 0)
    xParent.Fill.ForeColor.RGB = RGB(255, 255, 255)
    xColumns.Add xParent
    
    '中身
    For i = Selection(1).Row To Selection(Selection.Count).Row
        nCol = Selection(1).Column
        nRow = Selection(1).Row
        x = Cells(i, nCol).Left
        y = Cells(i, nCol).Top
        w = Cells(i, nCol).Width
        h = Cells(i, nCol).Height
        txt = Cells(i, nCol).Value
        s = Cells(i, nCol).Font.Size
        Dim xShape As Shape
        Set xShape = ActiveSheet.Shapes.AddShape(Type:=msoShapeRectangle, Left:=x, Top:=y, Width:=w, Height:=h)
        xShape.TextFrame.Characters.Text = txt
        xShape.TextFrame.Characters.Font.Color = vbBlack
        xShape.TextFrame.Characters.Font.Size = s
        xShape.TextFrame.HorizontalAlignment = xlHAlignLeft
        xShape.TextFrame.MarginBottom = 0
        xShape.TextFrame.MarginTop = 0
        xShape.Fill.Visible = False
        xShape.Line.Visible = False
        xShape.Name = txt

        xColumns.Add xShape
        
        Debug.Print (txt & vbTab & w & vbTab & h)
        'ActiveSheet.Shapes(txt).TextFrame.Characters.Text = txt
    Next
    
    For Each xShape In xColumns
        xShape.Select Replace:=False
    Next
    Selection.Group
    
End Sub

Excel2007でリボンに[開発]タブを表示するには

Microsoft2007でリボンに[開発]タブを表示するには、Excelのオプションを開き、[基本設定]の「[開発]タブをリボンに表示する」のチェックをオンにする。


2013年11月27日水曜日

マイクロソフト純正の仮想デスクトップマネージャ

デフォルトの設定でAlt+1~4で4つのデスクトップを使い分けられて便利。

動作も軽い。

http://technet.microsoft.com/en-in/sysinternals/cc817881(en-us).aspx



サクラエディタのSQL崩しマクロ

サクラエディタでSQL崩しをするためのマクロ。 SQL崩し.mac として保存。 [設定]→[共通設定]→マクロタブを選択。 [名前]にS「SQL崩し」、[File]に保存したマクロファイルを指定して[設定]ボタンをクリックする。
//キーボードマクロのファイル

//S_SelectAll(0); // すべて選択
//S_ToUpper(0); // 大文字
S
_ReplaceAll('\\t', '    ', 156); // タブをスペースに
S_ReDraw(0); // 再描画
S_ReplaceAll('[ ]+', ' ', 156); // 連続スペースをまとめる
S_ReDraw(0); // 再描画
S_ReplaceAll('\\r', '\\n', 156); // キャリッジリターン削除
S_ReDraw(0); // 再描画
S_ReplaceAll('^\\n', '', 156); // 空行削除
S_ReDraw(0); // 再描画
S_GoFileTop(0); // ファイルの先頭に移動
S_ReplaceAll('^ ', '', 28); // 行頭のスペース削除
S_ReDraw(0); // 再描画
S_GoFileTop(0); // ファイルの先頭に移動
S_ReplaceAll('$', ' ', 28); // 行末にスペース追加
S_ReDraw(0); // 再描画

S_ReplaceAll('SELECT ', 'SELECT \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('INSERT ', 'INSERT \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('UPDATE ', 'UPDATE \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('DELETE ', 'DELETE \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('FROM ', 'FROM \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('WHERE ', 'WHERE \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('ORDER BY ', 'ORDER BY \\n', 28); // 
S_ReDraw(0); // 再描画
S_ReplaceAll('GROUP BY ', 'GROUP BY \\n', 28); // 
S_ReDraw(0); // 再描画

S_ReplaceAll('^', '    ', 28); // 行頭に4つスペース
S_ReDraw(0); // 再描画

S_GoFileTop(0); // ファイルの先頭に移動
S_ReplaceAll('    SELECT ', 'SELECT', 28); // SELECTのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    INSERT ', 'INSERT', 28); // INSERTのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    UPDATE ', 'UPDATE', 28); // UPDATEのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    DELETE ', 'DELETE', 28); // DELETEのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    FROM ', 'FROM ', 28); // FROMのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    WHERE ', 'WHERE', 28); // WHEREのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    ORDER BY ', 'ORDER BY ', 28); // ORDER BYのインデント解除
S_ReDraw(0); // 再描画
S_ReplaceAll('    GROUP BY ', 'GROUP BY ', 28); // GROUP BYのインデント解除
S_ReDraw(0); // 再描画

S_ReplaceAll('\\Z    ON ', ' ON ', 28); // JOINの途中で折り返さない
S_ReDraw(0); // 再描画

2013年11月20日水曜日

Androidアプリでボタンの状態(ステータス)ごとに色を変化させるには

selectorの中で指定するボタンのステータスの順番で意図したとおりにうまくいったりいかなかったり・・・。 とりあえず、ボタンが無効の時(state_enabled="false")を最初に記述したところenableがfalseの時の指定がうまく効いた。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="#b0c4de"></item>
    <item android:state_pressed="false" android:color="#ffffff"></item>
    <item android:state_pressed="true" android:color="#b0c4de"></item>
</selector>

AndroidアプリでTableRowのOnClickをバインドするには

TableRowのOnClickにActivityのメソッド名を指定しても、それだけだとクリックしても指定されたメソッドは呼び出されない。 TableRowのプロパティにandroid:clickable="true"を追加してやるとイベントを拾えるようになる。
<TableRow
  android:id="@+id/tableRow2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
    android:clickable="true"
    android:onClick="showHowToPlay" >

Androidアプリで動的に生成したViewの幅や高さを取得するには

Viewを動的に生成する場合に、ほかのViewの幅を揃えたい場合などがあると思うが、ViewのgetWidth()はレイアウトが完了してからでないと0を返してくるので、取得したい幅が取得できない。 そこで、ViewTreeObserverのaddOnGlobalLayoutListener()を使って、レイアウト完了後にコールバックを受けて幅を取得する。
// ボタンの高さを幅に合わせる
ViewTreeObserver vto = btnHoge.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int width = btnHoge.getWidth();
    }
});

Androidアプリで別のActivityを起動するには

Androidアプリで別のActivityを起動するにはIntentのインスタンスを生成し、startActivity()メソッドに渡す。
        Intent intent = new Intent(this, HogeActivity.class);
        startActivity(intent);

AndroidのActivityで画面を縦固定にするには

AndroidのActivityで画面を縦固定にするにはsetRequestedOrientation()メソッドにActivityInfoの定数SCREEN_ORIENTATION_PORTRAITを渡す。
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // タイトルバーを非表示に
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.activity_main);

        // 画面は縦固定
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Activityのタイトルバーをコードで非表示にするには

Activityのタイトルバーをコードで非表示にするには、requestWindowFeature()メソッドにWindowの定数FEATURE_NO_TITLEを渡す。
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // タイトルバーを非表示に
        requestWindowFeature(Window.FEATURE_NO_TITLE);

2013年11月19日火曜日

AFreeChart-0.0.4の折れ線グラフでICS上では判例が正しく表示されない問題の回避策

// AFreeChart-0.0.4でICSでは凡例が正しく表示されない問題の回避
if(Build.VERSION.SDK_INT > 10){
    chartView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}

2013年6月27日木曜日

jQueryでHTMLのテーブルにページング機能を付与する

(function($) {
    $.fn.tablepager = function(options){

        var defaults = {
            table: null,
            pager: null,
            limit: 10,
            displayingText: '%TOTAL_ROW%件中、%FIRST_ROW% - %LAST_ROW%を表示',
            firstText: '最初',
            lastText: '最後',
            prevText: '前へ',
            nextText: '次へ',
            version: 0.1
        };
        defaults.table = this.selector;
        options.pager = options.pager;
        var config = $.extend({}, defaults, options);

        moveTo(1);

        if (this.tablesorter) {
            this.trigger('update');
        }

        // TABLE TBODY内のTRの数を返します
        function countRow() {
            return $(config.table).find("tbody tr").size();
        }
        // 最大ページ数を返します
        function countPage() {
            return Math.ceil(countRow() / config.limit);
        }
        // nページへ移動します
        function moveTo(n) {
            n = n ? n : 1;
            offset = config.limit * (n - 1);
            maxrow = offset + config.limit - 1;
            $.each($(config.table).find("tbody tr"), function(index){
                if (index < offset || index > maxrow) {
                    $(this).css('display', 'none');
                } else {
                    $(this).css('display', '');
                }
            });
            pagenate(n);
        }
        // ページネーションを出力します
        function pagenate(currentPage) {
            $(config.pager).empty();
            if (countRow() == 0) return false;
            var firstRow = (currentPage - 1) * config.limit + 1;
            var lastRow = firstRow - 1;
            $.each($(config.table).find("tbody tr"), function(){
                if($(this).css('display') != 'none') {
                    lastRow++;
                }
            });
            var markup = config.displayingText.replace('%TOTAL_ROW%', countRow())
                                              .replace('%FIRST_ROW%', firstRow)
                                              .replace('%LAST_ROW%', lastRow);
            for(var i=1; i <= countPage(); i++) {
                if (currentPage != i) {
                    markup += '' + i + ' ';
                } else {
                    markup += '' + i + ' ';
                }
            }
            $(config.pager).append(markup);
            $.each($(config.pager).find("a"), function(index){
                if($(this).text().match(/^\d$/)) {
                    $(this).bind('click', function(){
                        moveTo($(this).text());
                    });
                }
            });
        }
    };
})(jQuery);

2013年6月14日金曜日

TABLEにページング機能を追加するjQUery tablePagerプラグイン

TABLEにページング機能を追加するjQUery tablePagerプラグインを作ってみました。
/**
 * jQuery tablePager plugin
 * TABLEタグ内のTBODY下にあるTRタグを指定された件数ごとにページングし、
 * 指定されたセレクタにページネーションを出力するjQueryプラグインです。
 *
 * 【html】
 *     <div id='pager'></div>
 *     <table id='item_list'>
 *     <thead>…</thead>
 *     <tbody>
 *         <tr>
 *             <td>xxxxxxx</td>
 *
 * 【javascript】
 *     $('#item_list').tablePager();
 *
 * 【option】
 *     appender      : ページネーションを出力する要素のID
 *     displayingText: (既定)%TOTAL_ROW%件中、%FIRST_ROW% - %LAST_ROW%を表示'
 *                      %で囲まれた部分が変数によって置換されます。
 *     firstText     : (既定)最初→最初のページへのリンクに使用する文字列です。
 *     lastText      : (既定)最後→最後のページへのリンクに使用する文字列です。
 *     prevText      : (既定)前へ→前のページへのリンクに使用する文字列です。
 *     nextText      : (既定)次へ→次のページへのリンクに使用する文字列です。
 *
 */
(function($){
    $.extend({
        tablePager: new function() {
            // 設定情報
            var config;

            // デフォルト値
            var defaults = {
                limit: 10,
                page: 1,
                appender: 'pager',
                tableId: '',
                displayingText: '%TOTAL_ROW%件中、%FIRST_ROW% - %LAST_ROW%を表示',
                firstText: '最初',
                lastText: '最後',
                prevText: '前へ',
                nextText: '次へ',
            };

            // 総レコード数を返す
            function getRecordCount() {
                return $(config.tableId).find("tbody tr").length;
            }
            // 1ページあたりの表示件数を返す
            function getLimit() {
                return config.limit;
            }
            // 最大ページ番号を返す
            function getMaxPages() {
                return Math.ceil(getRecordCount() / config.limit);
            }
            // 現在表示しているページを返す
            function getPage() {
                return config.page;
            }
            // 現在表示しているページの最初の行番号を返す
            function getFirstRow() {
                return config.limit * (config.page - 1) + 1;
            }
            // 現在表示しているページの最後の行番号を返す
            function getLastRow() {
                return getFirstRow() + $(config.tableId).find('tbody tr:visible').length - 1;
            }

        /**
         * public methods
         */

            // id が appender のエレメントにページネーションを出力する
            $.fn.pagenate = function pagenate() {
                var prefix = '_pagenate';
                $('#'+config.appender).html('')
                var link = config.displayingText.replace('%TOTAL_ROW%', getRecordCount())
                                                .replace('%FIRST_ROW%', getFirstRow())
                                                .replace('%LAST_ROW%',   getLastRow());
                if (config.page > 1) {
                    link += '|<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(1)">' + config.firstText + '</a> ';
                    link += '|<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(' + (config.page - 1) + ')">' + config.prevText + '</a> ';
                }

                for(var i=1; i<=getMaxPages(); i++) {
                    id = prefix + i;
                    if (i != config.page) {
                        link += '<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(' + i + ')">' + i + '</a> ';
                    } else {
                        link += '<b>' + i + '</b> ';
                    }
                }
                if (config.page < getMaxPages()) {
                    link += '|<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(' + (config.page + 1) + ')">' + config.nextText + '</a> ';
                    link += '|<a href="javascript:void(0);" onclick="$(\'' + config.tableId + '\').page(' + getMaxPages() + ')">' + config.lastText + '</a> ';
                }
                $('#'+config.appender).append(link);
            }
            // nページへ移動する
            $.fn.page = function page(n) {
                config.page = n;
                var offset = config.limit * (config.page - 1);
                var nRow = 1;
                $.each($(config.tableId).find("tbody tr"), function(){
                    if (nRow > offset && nRow <= offset + config.limit) {
                        $(this).show();
                    } else {
                        $(this).hide();
                    }
                    nRow++;
                });
                // ページネーションを再描画
                this.pagenate();
                return false;
            }

            // コンストラクタ
            this.construct = function(options) {
                config = $.extend(defaults, options);
                config.tableId = this.selector;
                this.page(1);
                this.pagenate();
            };
            return this;
        }
    });
    // extend plugin scope
    $.fn.extend({
        tablePager: $.tablePager.construct
    });
})(jQuery);

2013年6月6日木曜日

CSS:長いURLなどをブロック要素内で強制的に折り返すには

CSS:長いURLなどをブロック要素内で強制的に折り返すには
word-wrap:break-word;
word-break:break-all;

2013年5月29日水曜日

2013年5月1日水曜日

Oracleは空文字列をNULLとして扱う

Oracleは空文字列をNULLとして扱うので
select nvl(NULL, '') from dual
の結果はnullである・・・

2013年4月17日水曜日

PHPの正規表現でHTMLの実体参照を取り除く

$bodyから実体参照(たとえば&amp;とか&gt;、&lt;、&quot;など)を取り除く場合

preg_replace("/&#?[a-z0-9]{2,8};/i","",strip_tags($body));

2013年4月16日火曜日

Symfony2のBasic認証が失敗する

PHPがFastCGIで動作しているサーバの場合は.htaccessでRequestヘッダを通過させるよう設定する必要があるみたい。

Symfony2の場合はweb/.htaccessにこんな感じで。
<IfModule mod_rewrite.c>
    RewriteEngine On

    <IfModule mod_vhost_alias.c>
        RewriteBase /
    </IfModule>

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]

    # Pass Authorization headers to an environment variable
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

2013年4月15日月曜日

MySQLで結果がNULLの時に0を返すには

最近Oracleばっかり触ってたからど忘れ・・・
select COALESCE(val, 0) from XXXXXX
っと。

Googleカレンダーに「日本の祝日」カレンダーを追加するには

Googleカレンダーに「日本の祝日」カレンダーを追加するには

1.Googleカレンダーにアクセス


2.[他のカレンダー]→[おすすめのカレンダーを検索]



 3.[日本の祝日]の[登録]をクリックする


2013年4月14日日曜日

PHPで文字列から画像のURLを抽出してIMGタグに置換する

掲示板なんかでよく使うアレですね。
$pattern = '/(ttps?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\.(jpg|gif|png)/';
preg_match_all($pattern, $body, $matches);
if(count($matches)){
    foreach($matches[0] as $i=>$url) {
        $replace = "<img src='h{$url}'>";
        $images[] = $replace;
        $body = str_replace($url, $replace, $body);
    }
}

2013年4月13日土曜日

Bootstrapでヘッダのナビゲーションを画面上部に固定するには

画面上部にナビゲーション領域を固定したり、デスクトップとスマホ用のコンテンツを一つのHTMLで表現したりするためによく使うテンプレートをここにコピペしておきます。


<!DOCTYPE html>
<html lang="ja">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8" />
    <link rel="stylesheet" href="/css/bootstrap.min.css" />
    <link rel="stylesheet" href="/css/bootstrap-responsive.min.css" />
<title>Welcome!</title>

<link rel="icon" type="image/x-icon" href="/favicon.ico" />
</head>
<body>
<div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container">
            <a class="btn btn-navbar pull-left" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            </a>
            <a class="brand" href="#">Your Brand</a>
            <div class="nav-collapse">
                <ul class="nav">
                  <li class="active"><a href="#">Home</a></li>
                </ul>
            </div><!--/.nav-collapse -->
        </div>
    </div>
</div>
<div class="container">

</div>
<script src="/app_dev.php/js/jquery.min.js"></script>
<script src="/app_dev.php/js/bootstrap.min.js"></script>
</body>
</html>

Symfony2でBootstrapを利用する場合の設定例

Symfony2でBootstrapを利用する場合に、だいぶ苦労したので忘れないうちにメモ。


まずバンドルのResources/publicの下にBootstrapのcss、img、jsファイルを配置。
   Hoge
    └─FugaBundle
        ├─Controller
        ├─DependencyInjection
        ├─Entity
        ├─Resources
        │  ├─config
        │  ├─public
        │  │  ├─css/
        │  │  │      bootstrap-responsive.css
        │  │  │      bootstrap-responsive.min.css
        │  │  │      bootstrap.css
        │  │  │      bootstrap.min.css
        │  │  │
        │  │  ├─img/
        │  │  │      glyphicons-halflings-white.png
        │  │  │      glyphicons-halflings.png
        │  │  │
        │  │  └─js/
        │  │          bootstrap.js
        │  │          bootstrap.min.js
        │  │          jquery.min.js
        │  └─views
        │      └─Matome
        └─Tests
            └─Controller

config.ymlでAsseticの設定で、対象となるBundleにHogeFugaBundleを追加する。

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: true
    bundles:        [ HogeFugaBundle ]
    #java: /usr/bin/java
    filters:
        cssrewrite: ~
        #closure:
        #    jar: %kernel.root_dir%/Resources/java/compiler.jar
        #yui_css:
        #    jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar


bootstrapのCSSとJavaScriptを読み込めるようにTwigを記述。

<html lang="jp">
<head>

{% stylesheets
    'bundles/hogefuga/css/bootstrap.min.css' filter='cssrewrite'
    'bundles/hogefuga/css/bootstrap-responsive.min.css' filter='cssrewrite' %}
    <link href="{{ asset_url }}" rel="stylesheet"></link>
{% endstylesheets %}
<title>{% block title %}Welcome!{% endblock %}</title>

{% block stylesheets %}{% endblock %}
<link href="{{ asset('favicon.ico') }}" rel="icon" type="image/x-icon"></link>
</head>

<body>
{% block body %}

<legend>Hello Bootstrap <i class="icon-heart"></i></legend>

{% endblock %}

{% javascripts
    '@HogeFugaBundle/Resources/public/js/jquery.min.js'
    '@HogeFugaBundle/Resources/public/js/bootstrap.min.js' %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% block javascript %}
{% endblock %}
</body>
</html>




で、最後に
php app/console assets:install
php app/console assetic:dump

画像からBootstrapのCSSをカラーコーディネートしてくれるサイト

画像を投稿すると、その画像をもとにしてBootstrapのCSSをカラーコーディネートしてくれるサイト。 http://www.lavishbootstrap.com/ 自分のサイトの雰囲気にあった画像を投稿すれば、それっぽいCSSを出力してくれる。

Symfony2に関するあれこれ

Symfony2でバンドルを作成するには

バンドルを作成するにはgenerate:bundleを使用する。

最初にnamespaceだけ決めれば途中でいくつか質問されるが、デフォルトのままOKを押せばOK。

ただし、Configuration formatはymlがおすすめ。 Symfony2では何かと設定ファイルを編集することになるが、設定の仕方を調べるとほとんどYAML形式での設定方法を記述しているので、YAMLを選択すると楽になるかも。
#php app/console generate:bundle --namespace=Hoge\FugaBundle


  Welcome to the Symfony2 bundle generator



Your application code must be written in bundles. This command helps
you generate them easily.

Each bundle is hosted under a namespace (like Acme/Bundle/BlogBundle).
The namespace should begin with a "vendor" name like your company name, your
project name, or your client name, followed by one or more optional category
sub-namespaces, and it should end with the bundle name itself
(which must have Bundle as a suffix).

See http://symfony.com/doc/current/cookbook/bundles/best_practices.html#index-1 for more
details on bundle naming conventions.

Use / instead of \  for the namespace delimiter to avoid any problem.

Bundle namespace [Hoge\FugaBundle]:

In your code, a bundle is often referenced by its name. It can be the
concatenation of all namespace parts but it's really up to you to come
up with a unique name (a good practice is to start with the vendor name).
Based on the namespace, we suggest HogeFugaBundle.

Bundle name [HogeFugaBundle]:

The bundle can be generated anywhere. The suggested default directory uses
the standard conventions.

Target directory [C:/xampp/htdocs/your-project/src]:

Determine the format to use for the generated configuration.

Configuration format (yml, xml, php, or annotation) [annotation]: yml

To help you get started faster, the command can generate some
code snippets for you.

Do you want to generate the whole directory structure [no]?


  Summary before generation


You are going to generate a "Hoge\FugaBundle\e" bundle
in "C:/xampp/htdocs/your-project/src/" using the "yml" format.

Do you confirm generation [yes]?


  Bundle generation


Generating the bundle code: OK
Checking that the bundle is autoloaded: OK
Confirm automatic update of your Kernel [yes]?
Enabling the bundle inside the Kernel: OK
Confirm automatic update of the Routing [yes]?
Importing the bundle routing resource: OK


  You can now start using the generated code!

.svnフォルダをすべて削除するには

コマンドプロンプトで

for /R /D %I in (.svn) do RMDIR "%I" /S /Q