この記事では、Repositoryを使ってデータベースの情報をページに表示させる方法を解説します。
なおデバッグモードを設定しておくと、エラーが起きたときに詳細情報が表示されるようになります。
エラー箇所を探しやすくなるので、開発前に設定しておくのをオススメします。
デバッグモードの設定方法については こちらの記事 で解説しています。
初期ページ(作成前)と完成ページ
- 初期ページ
-
テストページ(初期) Twigファイルに直接記載した「テストページ」のみ表示。
TwigとControllerのコードは以下に記載。
- 完成ページ
-
テストページ(完成) 商品データベースから、「商品ID = 14」の商品(本記事では「サンプル_1」という仮の商品)情報をTwigファイルに渡し、商品名を表示させる。
手順やコードなどは本記事に掲載。
本記事では、事前に用意したテストページ(URL: ドメイン名/test)のTwigとControllerを使って解説します。
同じような環境を準備したい方は、以下記事とコードを参考に作ってみてください。
- 初期ページのTwigファイル
-
app/template/default/test.twig
{% extends 'default_frame.twig' %} {% block main %} <h1>テストページです。</h1> {% endblock %}
タイトルを表示させるだけのシンプルなTwigです。
- 初期ページのControllerファイル
-
app/Customize/Controller/TestController.php
<?php namespace Customize\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Eccube\Controller\AbstractController; class TestController extends AbstractController { /** * @Route("/test", name="test") * @Template("test.twig") */ public function index(Request $request) { return []; } }
「ドメイン名/test」にアクセスしたら「test.twig」が表示されるだけのシンプルなControllerです。
どうやってデータベースから情報を取得してくるか?
EC-CUBEでは、データベースの操作は『Repository』というデータベースを操作するためのファイルを使います。
Repositoryファイルは基本的にデータベースごとに作成されており、商品情報に関するRepositoryファイルは「src/Eccube/Repository」下にある ProductRepository というファイル名で保管されています。
このRepositoryはController経由で呼び出すことができ、特定のデータを取得することはもちろん、新しいデータを追加したり既存の内容を変更・削除したりすることができます。
本記事では、ControllerでRepositoryを呼び出す方法 & 商品IDから商品情報を取得する方法を紹介します。
作成手順と各手順の詳細
- ControllerファイルにRepositoryを利用したコードを記載し、ファイルサーバーにアップ。
- Twigファイルを修正。
- EC CUBE 管理画面にてキャッシュを削除。
Controllerの作成
上述の「TestController」を以下の通り修正し、ファイルサーバーのapp/Customize/Controllerにアップします。
<?php
namespace Customize\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Eccube\Controller\AbstractController;
use Eccube\Repository\ProductRepository;
class TestController extends AbstractController
{
/**
* @var ProductRepository
*/
protected $productRepository;
/**
* @param ProductRepository $productRepository
*/
public function __construct(ProductRepository $productRepository) {
$this->productRepository = $productRepository;
}
/**
* @Route("/test", name="test")
* @Template("test.twig")
*/
public function index(Request $request)
{
$Sample = $this->productRepository->find(14);
return [
'Product' => $Sample
];
}
}
修正点(追加点)は以下の3つ。
- オレンジ下線部
-
「ProductRepository」を使用するための宣言を記述。
操作したいデータベースに応じて表記は変更する。商品データを操作したい場合は「ProductRepository」、注文データを操作したい場合は「OrderRepository」、など。 - 青下線部
-
Class内でRepositoryを使用するための初期設定。
この記述があることで、「$this->ProductRepository」からProductRepositoryを呼び出してその機能(情報を取得するなど)を使うことができます。 - 緑下線部
-
ProductRepositoryの機能を使って商品ID = 14の商品データを取得し、それをTwigファイルに渡すためのコード。
このIDは、実際にページに表示させたい商品IDを記載ください。まず「$this->productRepository->◯◯」とすることで、ProductRepository内の関数が使えます。呼び出せるメソッドはいろいろありますが、ここでは引数にIDを渡すことで対象の商品情報を取り出せる「find()」を使っています。
Repositoryのメソッドについては こちら
さらにその情報を「$Sample」という変数に格納し、最後のreturnでTwigファイル内のProductに渡しています。
ControllerからTwigファイルにデータを渡す方法については こちら
Twigファイルの修正
冒頭の「Twigファイル」(ファイル名:test.twig)を以下の通り修正します。
{% extends 'default_frame.twig' %}
{% block main %}
<h1>テストページです。</h1>
<p>{{ Product.name }}</p>
{% endblock %}
先程修正したControllerより、Productには$Sample(商品ID = 14の商品情報)が格納されています。
商品名を表示する場合は「Product.name」と記載します。もちろん他の情報(画像や価格など)も表示でき、記載の仕方は商品詳細ページや商品一覧ページのTwigファイルを参考にしてみてください。
キャッシュを削除
ここまでで準備完了です。
管理画面からキャッシュを削除して、ページにアクセスしてみましょう。

冒頭でお見せしたような、「テストページです。」というタイトルの下に、Controllerで渡した商品IDの商品名が表示されていればOKです!

商品IDを変えれば他の商品情報を取得して表示させることもできます。
商品名だけでなく、画像や価格、コードなど、商品データベースに保存してある情報なら基本的にすべて表示できますので、他のページを参考にしながらいろいろ試してみると面白いかも。
まとめ
以上、データベースの商品情報を取得してページに表示させる方法を紹介しました。
今回はRepositoryという機能のもっとも基本的な使い方を解説しました。本記事では商品IDからデータを持ってくるという用法でしたが、以下のような特定の条件に合う商品情報だけを持ってきたり、データベースの情報を書き換えたりなど、Repositoryを使っていろいろな機能を使うことができます。
本格的なカスタマイズにはデータベースの活用が必須ですので、ぜひ使いこなせるようにしておきましょう!