【Laminas】リポジトリクラスのファクトリを作る!

Laminas

どーも!marusukeです!

前回の記事(【Laminas】データベースからデータを扱うためのモデル(リポジトリクラス)を作る!)の続きで、作成したリポジトリクラスのファクトリーを作り、アプリケーションにリポジトリの存在を知らせる設定をしていきます!

リポジトリクラスのファクトリを作る

LaminasDbSqlRepository.phpのファクトリーを作ります。

理由は、LaminasDbSqlRepositoryがAdapterInterfaceという引数を必要とするためです。

以下の内容になります。

module/Blog/src/Factory/LaminasDbSqlRepositoryFactory.php

namespace Blog\Factory;

use Interop\Container\ContainerInterface;
use Blog\Model\LaminasDbSqlRepository;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\ServiceManager\Factory\FactoryInterface;

class LaminasDbSqlRepositoryFactory implements FactoryInterface
{
    /**
     * @param ContainerInterface $container
     * @param string $requestedName
     * @param null|array $options
     * @return LaminasDbSqlRepository
     */
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        return new LaminasDbSqlRepository($container->get(AdapterInterface::class));
    }
}

ファクトリーについての説明は割愛します。(ListControllerFactory作成時の記事に簡単に説明しました。こちらです!)

これで、LaminasDbSqlRepositoryにAdapterInterface::classを注入出来ました!

アプリケーションにリポジトリの存在を知らせる設定をする!

つまり、module/Blog/config/module.config.phpにLaminasDbSqlRepositoryFactoryを追記します。以下の通りです。

module/Blog/config/module.config.php

return [
    'service_manager' => [
        'aliases' => [
            // 赤のアンダーライン部分を更新します
            Model\PostRepositoryInterface::class => Model\LaminasDbSqlRepository::class,
        ],
        'factories' => [
            Model\PostRepository::class => InvokableFactory::class,
            // 青のアンダーライン部分を追加します
            Model\LaminasDbSqlRepository::class => Factory\LaminasDbSqlRepositoryFactory::class,
        ],
    ],
    'controllers'  => [ /* ... */ ],
    'router'       => [ /* ... */ ],
    'view_manager' => [ /* ... */ ],
];

赤のアンダーライン部分を説明すると、

以前は、Model\PostRepository::classをPostRepositoryInterfaceのエイリアスとして呼び出していましたが、今回からは、SQLiteからデータを取得するリポジトリ(LaminasDbSqlRepository)を呼び出すように設定しています。

青のアンダーライン部分を説明すると、

LaminasDbSqlRepositoryクラスのインスタンス化は、LaminasDbSqlRepositoryFactoryを使用することをアプリケーションに伝えています。

これで、設定が完了しました!お疲れ様でした!

次の記事で、ListControllerのメソッドを実装していきます!

コメント

タイトルとURLをコピーしました