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です
と表示される
以上、参考になればと思います。
参考文献
よろしければサポートをお願いします。 今後の活動の励みになります。