【EC-CUBE 4】Repositoryの新規作成およびデータを表示する方法

新規テーブルに保存したデータをWebページに表示する方法

新規作成したオリジナルテーブルのデータを取り出す(Webページに表示する)には?

この記事では、データベースに新規作成したテーブルのRepositoryを作成し、保存データをWebページに表示させる方法を解説しています。

本記事は、こちらの記事 の続き(『dtb_Maker』を新規作成した状態)からの手順となります。

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

【動作環境】
EC CUBEのバージョン:4.1.2
サーバー:Xserver

目次

実装後の状態

データベースに『dtb_Maker』というテーブルを新たに作成し、3つのデータを格納します。

今回は、データベース上で直接データ(レコード)を書き込みました。なお、フォームを使ったデータの保存方法については別記事で解説予定です。

新規作成したdtb_Makerに、3つのデータを保存しておく
『dtb_Maker』の中身

「discriminator_type」には、エンティティのクラス名を小文字で入力します。空の状態だとデータを取り出せないため、データベースから直接データ(レコード)を格納する場合は忘れずに!

格納したデータを取り出して、Web上に表示させます。

表示させるページは、こちらの記事 で作成した「sampleページ」を利用しています。

新規作成したテーブルの情報を取り出して、Web上に表示させる
『dtb_Maker』に保存した内容(nameとcode)をリストで表示させる

データベースにアクセスして情報を取得するにはRepositoryという機能を使います。またRepositoryを使うには、表示したいページのControllerを修正する必要があります。この辺りについては以下記事で解説していますので、合わせてご覧ください。

実装までの手順

『dtb_Maker』テーブル新規作成 & テーブルにデータ保存後より、そのデータをWebページに表示するまでの流れを解説します。

Repositoryの作成

まずはRepositoryを作成します。
以下コードを記述した「MakerRepository.php」ファイルを作成し、「app/Customize/Repository」にアップします。

<?php

namespace Customize\Repository;

use Customize\Entity\Maker;
use Eccube\Repository\AbstractRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;

/**
 * MakerRepository
 */
class MakerRepository extends AbstractRepository
{
    public function __construct(RegistryInterface $registry)
    {
        parent::__construct($registry, Maker::class);
    }

}

Controllerの修正

続いて、先ほど作成したRepositoryを使うために、表示したいWebページに対応するControllerを修正します。

本記事では、過去記事で作成した「SamplePageController」のコードを以下の通り書き換えます。

<?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 Customize\Repository\MakerRepository;

class SamplePageController extends AbstractController
{
    /**
     * @var MakerRepository
     */
    protected $makerRepository;

    /**
     * @param MakerRepository $makerRepository
     */
    public function __construct(MakerRepository $makerRepository) {
        $this->makerRepository = $makerRepository;
    }

     /**
     * @Route("/sample", name="sample")
     * @Template("sample.twig")
     */
    public function index()
    {
        $makers = $this->makerRepository->findall();

        return [
            'Makers' => $makers,
        ];
    }
}

基本的には、こちらの記事に載せているコードの一部を変更したもので、特別な記述はありません。

  • ProductRepository → MakerRepository に変更。
    ProductRepositoryとMakerRepositoryのディレクトリが異なるため、use部分の記載も修正。
  • すべてのデータを取り出す「findall()」を使用し、変数$makersに格納。
    また、Twig側では「Makers」で受ける。
    特定のidを指定して取り出す場合は「find()」を使用

Twigの修正

先ほど修正したControllerの通り、データベースから取得したデータは「Makers」で受けることになっています。データは配列になっているため、for文を使って以下のように取り出せます。

{% extends 'default_frame.twig' %}

{% block main %}
  <h1>メーカーリスト(会社名/メーカーコード)</h1>
  <ul>
    {% for Maker in Makers %}
      <li>{{ Maker.name }}/{{ Maker.code}}</li>
    {% endfor %}
  </ul>
{% endblock %}

なお、for文の使い方については以下記事で解説しています。

キャッシュの削除

ここまでで準備完了です。
管理画面からキャッシュを削除して、ページにアクセスしてみましょう。

キャッシュ管理からキャッシュを削除できます。

冒頭でお見せしたように、データベースに保存されている情報が掲載されていればOKです!

新規作成したテーブルの情報を取り出して、Web上に表示させる

まとめ

以上、Repositoryの新規作成からデータの表示方法までを紹介しました。
テーブル作成から表示までのステップはたくさんありますが、過去に解説した内容とリンクする部分も多いため、実はそれほど複雑なことはしていません。

今回はデータベースから直接データ(レコード)を追加しましたが、もちろんWeb上から新規データ(レコード)の追加や修正、削除もできます。今後はその辺りについて解説したいと思います。

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

この記事を書いた人

ノベルティグッズのECサイトを運営する中小企業役員。
本ブログを通じ、販促向けの最新/ロングセラー商品紹介やWebサイト制作に役立つ技術情報を発信しています。

目次