Symfony Controller とEC-Cube4 (4)

前のページの続き
このページでは、EC-Cube 4でPOSTを使ったパラメータを渡す方法について書く。

2. Controller annotateとテンプレートの呼び出し

3 )EC-Cube4でパラメータ付きでテンプレートを呼びだす その2

前のページでは、 http://ドメイン名/test/{id} の様に、このidを受け取って、returnで twigテンプレートに返す方法を書いた。
この方法だと、一つのパラメータのみを送ることになりますが、多くのパラメータを送るために、POSTを使った方法について書く。
 この形式で受け取った後のパラメータの処理とtwigテンプレートに渡すControllerを作成する。
例ではvalidation等の処理はしていないので、実際の使用では気を付ける必要がある。

受ける側のコントローラ
controller のannotate部分
/**
 * 
 * @Route("/test", name="test") #URLを指定
 * @Template("test.twig")
 */

app/Customize/Controller/testController.php

<?php
namespace Customize\Controller;

use Symfony\Component\HttpFoundation\Request;
use Eccube\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;

class TestController extends AbstractController
{
    /**
     * # @Method("GET") <- 削除
     * @Route("/test", name="test") # /test/{id} の/{id}削除
     * @Template("test.twig")
     */
    public function index(Request $request)
    {
        $id= $request->request ->get('id'); // <- postなのでrequestに変更
        $categoryId = $request->request ->get('categoryId'); // 変更
        
        return  [ 'id' => $id, 
                'categoryId' => $categoryId,]; //引き渡すパラメータ
    }
}

受け手側のControllerでの変更は、Postを使って変数を渡すことにするので、
$request -> request ->get('キーワード') になる
呼び出し側は、Twig 呼び出しのMethodにPostに指定する

確認の為のテンプレート test.twig 
受け側のテンプレートは変更無し

{% extends 'default_frame.twig' %}

{% block main %}
    <h3>Hello  !</h3>
    <p> Idは{{id}}です</p> {# controllerから引き渡された変数名 id, categoryId #}
    <p> categoryIdは{{categoryId}}です。
{% endblock %}

テスト用の呼び出し側
app/Customize/Controller/testController.php に呼び出しのannotateとFormを作成
呼び出し側のテンプレートはtestSendとする。

Controllerに追加するannotateとFunction

/**
* @Route("/testSend", name="testSend") #URLを指定 
* @Template("testSend.twig")
*/
public function testSend(Request $request){  // <-Funciton
   return ['title' => 'Hello',
   'message' => 'idとカテゴリーを入力してください', ];
 }

呼び出す側のTwig 

{% extends 'default_frame.twig' %}

{% block main %}
    <h3>{{title}}</h3>
    <p>{{message}}</p>
    <form action="test" method="Post"> {# <- 変数を渡す方法 Post #}
    <input type="text" name="id" >
    <input type="text" name="categoryId" value="3">
    <input type="submit" value="Click" />
    </form>
{% endblock %}

ページの登録
EC-Cubeなので、testSend ページを新規ページで登録する
EC-cube 管理画面−>コンテンツ管理−>ページ管理−>新規作成 と進み
ページ名 −> ポストテスト(何でも良い)
URL 必須 http://ドメイン名/user_data/ に testSend と入力
ファイル名 必須 app/template/user_data/    .twig の空欄に
testSend と入力
登録ボタンをクリックして登録

その他の注意は前のページまでと同じ

テスト
http://ドメイン名/testSend にアクセス
idとcategoryIdに適当に入力して、Clickをクリックすると 
http://ドメイン名/test に飛んで、
Hello! 
idはxです。
categoryIdはxです
と表示される

以上、参考になればと思います。

参考文献


よろしければサポートをお願いします。 今後の活動の励みになります。