Symfony Controller とEC-Cube4 (2)

前のページの続きです。

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

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

 別のページを呼ぶ際に商品IDなどを付けて呼びだしたい時は良くあることです。
例えば、有る商品をクリックしたら、その詳細を表示するページに飛ぶなど。
方法は以下のページを参照

以下のコードを app/Customize/Controller に testController.phpで作成

<?php
namespace Customize\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; # <-追加
use Eccube\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;

class testController extends AbstractController
{
   /**
     * @Method("GET")
     * @Route("/test/{id}",name="test")
     * @template("test.twig")
     */
    public function testMethod($id)
    {
        return ['id' => $id]; // <- idをidで引き渡す
    }
}

Method の追加を忘れるとエラーになる
’id'がテンプレート側での変数名になる。
表示するテンプレートファイルは、app/template/default にtest.twig
で、作成

{% extends 'default_frame.twig' %}

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

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

ページ管理のURLに注意 Controllerが読まれていれば、/{id}と表示される

これで http://ドメイン名/test/3 として、呼ぶと
Hello!
IDは3です
と表示されます

登録が出来ていないとエラーとなるので、注意。
また、http://ドメイン名/test で、指定すると Page Not Found になるので、注意

参考文献


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