はじめに
前回の続き
/sampleに新規ページを作成する。
ページ追加
Controller
src/Eccube/Controller/UserDataController.phpなどをCustomizeにコピー
src/Eccube/Controller/UserDataController.php → app/Customize/Controller/SamplePageController.php
app/Customize/Controller/SamplePageController.php
namespace Customize\Controller;
use Eccube\Controller\AbstractController;
use Eccube\Entity\BaseInfo;
use Eccube\Entity\Product;
use Eccube\Repository\BaseInfoRepository;
use Eccube\Repository\ProductRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
class SamplePageController extends AbstractController
{
/** @var BaseInfo */
protected $baseInfo;
/** @var Product */
protected $productRepository;
/**
* SamplePageController constructor.
* @param BaseInfoRepository $baseInfoRepository
* @param ProductRepository $productRepository
*/
public function __construct(
BaseInfoRepository $baseInfoRepository,
ProductRepository $productRepository
)
{
$this->baseInfo = $baseInfoRepository->get();
$this->productRepository = $productRepository;
}
/**
* @Route("/sample/{id}", name="sample_index")
* @Template("Sample/index.twig")
*/
public function index($id)
{
$product = $this->productRepository->find($id);
return [
'shop_name' => $this->baseInfo->getShopName(),
'product_name' => $product->getName(),
];
}
}
Template
app/template/default/Sample/index.twig
{% extends 'default_frame.twig' %}
{% block main %}
店舗名は"{{ shop_name }}"です。<br/>
商品名は"{{ product_name }}"です。<br/>
{% endblock %}
ブラウザよりアクセス
/sample/1 でページ表示できたがヘッダ部/フッタ部が表示されない。
dtb_page/dtb_page_layout
前回調べたとき、ここにデータがないとページレイアウトが表示されない感じだったので...
INSERT INTO `dtb_page` (`id`, `master_page_id`, `page_name`, `url`, `file_name`, `edit_type`, `author`, `description`, `keyword`, `create_date`, `update_date`, `meta_robots`, `meta_tags`, `discriminator_type`) VALUES (NULL, NULL, 'サンプルインデックスページ', 'sample_index', 'Sample/index', 2, NULL, NULL, NULL, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'noindex', NULL, 'page');
-- PAGE_IDはdtb_pageのid
INSERT INTO `dtb_page_layout` (`page_id`, `layout_id`, `sort_no`, `discriminator_type`) VALUES (PAGE_ID, 2, 41, 'pagelayout');
ブラウザよりアクセス
/sample/1 でページ表示できたしヘッダ部/フッタ部も表示された
#まとめ
手動でdtb_page/dtb_page_layoutにデータをInsertしないといけないのかよく分からないけど、CotrollerとTemplateを作成し、dtb_page/dtb_page_layoutにデータを入れることで実現できた。