Symfony4 Twigテンプレートにレンダリング
コントローラからテンプレートへ
renderメソッドを使用してtemplates/hello/index.html.twigにレンダリングする。
$this => render(テンプレート名, [テンプレートに渡す値の配列]);
ex)
public function index(Request $request) { return $this->render('hello/index.html.twig',[ 'name' => 'Kii', 'age' => 26 ]); }
テンプレート側では
{{name}}
や{{age}}
と記述することで値が表示される。
簡単!ちなみにTwigの読みはツイッグ
らしい
テンプレートからコントローラへ(パスパラメータ)
ルートアノテーションにパスパラメータ設定
/** * @Route("/sample/{msg}", name="sample") */
/sample/hogehoge
でアクセスすれば、$msg = 'hogehoge'
みたいに値を受け取れる。
フォームに入力した値をコントローラで受け取る
テンプレートのフォームインプットname属性で指定した名前で取り出せる。
テンプレート側
<input type="text" name="hoge" />
コントローラ側で取り出す際
$hoge = $reqest->request->get('hoge');
リクエストのHTTPメソッドをチェックする
if ($request->getMethod() == 'POST') { // POSTの時の処理 } else { // GETの時の処理 }
フォームのデータをインスタンスとして扱う
FormBuilderの作成
$this->createFormBuilder();
フィールドの追加
<<FormBuilder>> -> add( フィールドの名前, フィールドの種類, [属性の連想配列]);
addメソッドはチェーンして呼び出せるので、必要なだけ追加する。
フィールドの種類は、いろいろある。
例えば通常のテキストフィールド<input type="text />
をフォームに入れたい場合は
下記のように記述する。(第3引数は省略化)
<<FormBuider>>->add('hoge', TextType::class)
フィールドの種類一覧が見れる
Form Types Reference (Symfony Docs)
一通りフィールドをaddし終わったら、Formを取得する。 FormInterfaceオブジェクトを返す
<<FormBuilder>> ->getForm();
ビューを作る
<<FormInterface>> ->createView();
サンプル
<?php class Person () { protected $name; protected $age; public function setName($name) { $this->name = $name; return $this; // ここで自身を返すことでメソッドチェーン出来る } // ゲッター&セッター省略 } class SampleController extends AbstractController { $person = new Person(); $person->setName('kii') ->setAge(25); $form = $this->createFormBuilder($person) ->add('name', TextType::class) ->add('age', IntegerType::class) ->add('save', SubmitType::class) ->getForm(); $form->handleRequest($req); //送信されたフォーム情報をハンドリング $reqPerson = $form->getData(); // フォームのPersonインスタンスを取得 $reqName = $reqPerson->getName(); $reqAge = $reqPerson->getAge(); ... } ?>
ひとこと
FormBuilderを利用してTwigテンプレートとレンダリングするフォームが作れるということが分かりました!