【EC-CUBE 4】データベースの情報を表示する方法(初心者向け)

この記事では、Repositoryを使ってデータベースの情報をページに表示させる方法を解説します。

本格的なカスタマイズをしてみたい、初心者向けの内容です。
EC CUBEのバージョンは4.1.2を使っています。

なおデバッグモードを設定しておくと、エラーが起きたときに詳細情報が表示されるようになります。
エラー箇所を探しやすくなるので、開発前に設定しておくのをオススメします。
デバッグモードの設定方法については こちらの記事 で解説しています。

目次

初期ページ(作成前)と完成ページ

初期ページ
初期ページ
テストページ(初期)

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から商品情報を取得する方法を紹介します。

作成手順と各手順の詳細

  1. ControllerファイルにRepositoryを利用したコードを記載し、ファイルサーバーにアップ。
  2. Twigファイルを修正。
  3. EC CUBE 管理画面にてキャッシュを削除。

Controllerの作成

上述の「TestController」を以下の通り修正し、ファイルサーバーの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;
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を呼び出してその機能(情報を取得するなど)を使うことができます。

上記2点はRepositoryを使うための前提コードのようなもの。
あまり深く考えず、「Repositoryを使うためにはこれらのコードを記述するのね」くらいの理解でOKです。

緑下線部

ProductRepositoryの機能を使って商品ID = 14の商品データを取得し、それをTwigファイルに渡すためのコード。
このIDは、実際にページに表示させたい商品IDを記載ください。

まず「$this->productRepository->◯◯」とすることで、ProductRepository内の関数が使えます。呼び出せるメソッドはいろいろありますが、ここでは引数にIDを渡すことで対象の商品情報を取り出せる「find()」を使っています。

Repositoryのメソッドについては こちら

さらにその情報を「$Sample」という変数に格納し、最後のreturnでTwigファイル内のProductに渡しています。

ControllerからTwigファイルにデータを渡す方法については こちら

Twigファイルの修正

冒頭の「Twigファイル」(ファイル名:test.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を使っていろいろな機能を使うことができます。

本格的なカスタマイズにはデータベースの活用が必須ですので、ぜひ使いこなせるようにしておきましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次