どーも!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のメソッドを実装していきます!
コメント