EC-Cube 4 customize controllerの作成

EC-Cube 4.2でProductの詳細を変更したいときに、自分で作ったページにアクセスをさせたいなどの時のコントローラの書き方について
たとえば、EC-Cubeの商品詳細ページは、
http://localhost:8888/products/detail/3
でよびだされています。
この 3が プロダクトIDです。これを例えば
Localhost:8888/test/3 
で、呼び出せるようにする。
そのためのController の書き方は

を参考に書きます。(ただし、これだけで書けるわけではないと思います)

最初の一歩

このように場合、上記のサイトをみると「URLからパラメータを受け取る」があるので、その通りに

 /**
     * @Method("GET")
     * @Route("/test/{id}")
    */
とコントローラに書くと確かにパラメータは受け取れる。
サンプルページをそのまま記述して、
public function testMethod($id)
{
   return new Response('Parameter is '.$id);
}
と書き、
localhost:8888/test/3
で呼びだすと、
Parameter is 3 
と表示されるだけです。
では、つぎに、ページを呼びだすか?について、
そこで、templateを定義して、以下のように記述
(EC-cube4.2 controllerのソースを参考に)

    /**
     * 商品詳細画面.
     *
     * @Route("/test/{id}", name="test", methods={"GET"}, requirements={"id" = "\d+"})
     * @Template("Product/detail.twig")
     * @ParamConverter("Product", options={"repository_method" = "findWithSortedClassCategories"})
     *
     * @param Request $request
     * @param Product $Product
     *
     * @return array
     */

上記の様にControllerに記述すると、元からあるProduct/Detail.twig を呼びます。

本題 やりたいこと

カスタマイズしたページを作り呼ぶ場合

EC-Cubeの「ページ管理」 −>新規作成 でオリジナルページを作ると
/app/template/user_data 
に作るようですが、これだとアクセスができません。
Controllerを使ってアクセスする場合、
/app/plugin や/app/template/default の下に作るとうまくいきます。

引数付きの場合

管理ページの ページ管理で元々ソースにある物で引数のある物は、以下の様に表示されています

どういう仕様なんだろうか?プラグインの作成者とかを優先する仕様だとは思うが。
また、引数は新規作成ページのURLに直接入れようとするとエラーになるので注意

引数を入れたい場合は、以下の様にControllerに入力すると引数が表示されるようになる。

* @Route("/test/{id}", name="test"

*@Route("/test/{id} , name ="test"のように書くと「ページ管理」のページに以下の様になり、URLから呼べるようになる。

test用 Controller 全体のソース

<?php

namespace Customize\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Eccube\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Eccube\Entity\Product;
use Eccube\Form\Type\AddCartType;

class TestController extends AbstractController
{
    private $title = '';

    /**
     * 商品詳細画面.
     *
     * @Route("/test/{id}", name="test", methods={"GET"}, requirements={"id" = "\d+"})
     * @Template("Product/Test.twig")
     * @ParamConverter("Product", options={"repository_method" = "findWithSortedClassCategories"})
     *
     * @param Request $request
     * @param Product $Product
     *
     * @return array
     */
    public function detail(Request $request, Product $Product)
    {


        $builder = $this->formFactory->createNamedBuilder(
            '',
            AddCartType::class,
            null,
            [
                'product' => $Product,
                'id_add_product_id' => false,
            ]
        );


        $is_favorite = false;
        if ($this->isGranted('ROLE_USER')) {
            $Customer = $this->getUser();
            $is_favorite = $this->customerFavoriteProductRepository->isFavorite($Customer, $Product);
        }

        return [
            'title' => $this->title,
            'subtitle' => $Product->getName(),
            'form' => $builder->getForm()->createView(),
            'Product' => $Product,
            'is_favorite' => $is_favorite,
        ];
    }
}

これで、http://local:8888/test/3.  で、/app/template/default/Product/Test.twigを引数付きで呼びだします。
引数を外すと 404 Page Not found エラーになるので注意

最後、return以下も注意(EC-cubeなどのソースをみるとか)


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