久しぶりにここに記事書きます^^
ついに!業務でSymfony2を使えることになりました!いえーい!!
というわけで、さっそくdoctrine:generate:crudを使いまくってます。
で、個人的にはまりやすいところをいくつかメモです。(書いておかないと次にやるとき忘れる…)
■Configuration formatはbundle自体のConfiguration formatに合わせる
bundleのConfiguration fotmatをymlにしてしまったら素直にymlを選んだほうがいいです。
一回ポンポンエンターキーを押してたら、bundleがymlなのにも関わらずannotationにしてしまい、あれこれググってもうまくimportさせることができませんでした。
■routingのauto updateは必ず失敗する
そのため必ず手動でResources/config/routing.ymlの変更が必要(ymlにしてる場合)
去年の12月のSymfony勉強会のハンズオンでも聞いてたのでそれほど焦らず(笑)
■update,deleteのHTTPメソッド
まず、Tests/Controllerにできる機能テストスケルトンのコメントアウトを外してそのまま実行すると
必ず失敗します。
デフォの更新・削除画面をそのまま操作しても
必ずエラーになります。
generate:crudが吐き出すviewではupdateがPUT、deleteがDELETEメソッドになるように書いてある(hiddenでname="_method"が書かれている)にも関わらず、routingがどちらもpostと指定されているからです。
これはわざとそうなってるのか、2.1.0のバグなのかわかりません。
従って、generate:crudが終わったらまず、edit.html.twigとshow.html.twigを開いてPUT,DELETEのhiddenを消す、又はrouting側の指定をput,deleteに変更する必要があります。
自動生成されるコントローラを見る限り、特にHTTPメソッドが変わることによって処理が分岐することはないので、私はPUT,DELETEのhiddenを消してpostで処理するようにしました。
■viewにHTMLタグが無い
生成されたtwigテンプレート達に{% extends "::base.html.twig" %}{% block body %}{% endblock %}をコピペするお仕事をやるだけです。←なにか自動化できないものか…
ちなみにバンドルごとに違うbasehtmlを使いたいときは::base.html.twigでなく
src/Acme/DemoBundle/Resources/views/base.html.twig → AcmeDemoBundle::base.html.twig
みたいな感じで参照できました。