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

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

この記事では、データベースに新規作成したテーブルのRepositoryを作成し、保存データをWebページに表示する方法を解説しています。
本記事は、こちらの記事 の続き(『dtb_maker』を新規作成した状態)からの手順です。

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

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

目次

新規リポジトリ(MakerRepository)を作成し、dtb_Makerテーブルに保存されたデータをWeb上に表示させる

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

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

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

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

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

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

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

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

リポジトリの新規作成~Web上にデータを表示させるまでの手順

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

  1. MakerRepostioryを作成し、app/Customize/Repositoryにアップロード
  2. 表示ページのControllerを作成(または修正)し、app/Customize/Controllerにアップロード
  3. 管理画面にて、表示ページのTwigテンプレートを作成(または修正)
STEP

Repositoryの新規作成

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

EC-CUBEのバージョンによってコードが異なります。
(4.2以降ではResistoryInterfaceが使えず、ManagerRegistryを使います。)

【EC-CUBE 4.0 / 4.1】の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);
    }

}
【EC-CUBE 4.2】のRepositoryファイルはこちら
<?php

namespace Customize\Repository;

use Customize\Entity\Maker;
use Eccube\Repository\AbstractRepository;
use Doctrine\Persistence\ManagerRegistry as RegistryInterface;

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

}
STEP

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()」を使用
STEP

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文の使い方については以下記事で解説しています。

STEP

キャッシュの削除

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

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

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

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

既存のリポジトリを拡張するには?

「ProductRepository」などデフォルトで用意されているリポジトリを修正したり、メソッドを追加したりするには?

この場合も、「Customize/Repository」に新しくリポジトリを作成します。
ただし、修正したいリポジトリの機能を引き継ぎたいので、class customProductRepository extends ProductRepositoryのようにextendsキーワードを使って元のリポジトリを継承します。(既存のリポジトリ正することもできますが、バグの原因になり得るため推奨しません。)

詳細は以下記事に纏めていますので、本記事と合わせて参考にしてください。

まとめ

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

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

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