どーも!masurukeです!
この記事からは、Laminas TutorialのBlogモジュールを作っていきます!公式ドキュメントはこちら
Blogモジュールの機能
Blogモジュールの機能は、以下の4つになります。
- 投稿(タイトル・記事)を一覧で表示する
- 投稿(タイトル・記事)を編集する
- 投稿(タイトル・記事)を追加する
- 投稿(タイトル・記事)を削除する
データベースに保存された投稿をCRUD操作できるようにするということです。
データベースへの保存内容
- id
- title
- text
の3つになります。
今回使用するのデータベースもSQLiteを使用します。
Blogモジュールを書く
Blogモジュールのディレクトリを作っていきます。
module/
Application/
Album/
Blog/
config/
src/
view/
以前の記事(【Laminas】モジュールのディレクトリ構造を作る)で作ったAlbumモジュールやデフォルトで入っているApplicationモジュールと同じディレクトリ内にBlogモジュール用のディレクトリを作りましょう!
BlogモジュールをModuleManagerに認識させる
BlogモジュールをModuleManagerに認識させるために、以下の3つの手順を行います。
- 新しいモジュールについてComposerに知らせる
- 名前空間をBlogにしたModule.phpを作る
- アプリケーションにBlogモジュールを伝える
新しいモジュールについてComposerに知らせる
composer.json内のautoload部分に以下の内容を追記します。
"autoload": {
"psr-4": {
"Application\\": "module/Application/src/",
"Album\\": "module/Album/src/",
"Blog\\": "module/Blog/src/" //ここを追記します
}
}
ターミナルでcomposer.jsonのあるディレクトリ内で、以下を実行します。
$ composer dump-autoload
これで、Blogモジュールの存在をComposerに知らせることができ、Blogという名前空間はmodule/Blog/src/を参照するようになりました。
名前空間をBlogにしたModule.phpを作る
module/Blog/src/にModule.phpを作ります。
以下の内容です。
namespace Blog;
class Module
{
}
これでModuleManagerが検知できるモジュールができました。
このままでは空なので、さらに、内容を書いていきます。
namespace Blog;
class Module
{
public function getConfig() : array
{
return [];
}
}
getConfigメソッドを追加しました。
Moduleオブジェクトは、ModuleManagerに対してgetConfigメソッドでルートを提供します。returnは配列かTraversable
オブジェクトになります。
getConfigメソッド内にルートを記述すると、Moduleクラスの内容が盛りだくさんになってしまうので、
module/Blog/config/module.config.php
からreturnとなる配列を呼びます。したがって、Moduleクラスを以下の内容に書き換えます。
class Module
{
public function getConfig() : array
{
return include __DIR__ . '/../config/module.config.php';
}
}
module/Blog/config/module.config.phpに書く内容は、以下の通りです。
namespace Blog;
use Laminas\Router\Http\Literal;
return [
// この行は、ルートマネージャーの構成を開きます
'router' => [
// 以下の配列内のルート全てを開きます
'routes' => [
// 「blog」と呼ばれる新しいルートを定義します
'blog' => [
// "literal" ルートタイプを指定します
'type' => Literal::class,
// "literal" ルートタイプの構成を設定します
'options' => [
// /blogをURLとして開いたときに
'route' => '/blog',
// Controller\ListController::classの
// indexActionメソッドを呼び出します
'defaults' => [
'controller' => Controller\ListController::class,
'action' => 'index',
],
],
],
],
],
];
これでルートは完成ですが、このルートで呼び出されたコントローラーがインスタンス化されるための仕組みがありません。
なので、このmodule.config.phpに以下の内容を書き足します。
'router' => [...], //ルートは省略します
'controllers' => [
'factories' => [
Controller\ListController::class => InvokableFactory::class,
],
],
これでhttp://localhost:8080/blogを開いた時、ListControllerのindexActionメソッドを呼び出すルートは完成しました。
アプリケーションにBlogモジュールを知らせる
先ほどまでで、http://localhost:8080/blogを開くと、ListControllerのindexActionメソッドを呼び出すルートは出来ましたが、このモジュールを持つアプリケーションはBlogモジュールの存在を知らない状態です。
なので、アプリケーションにBlogモジュールを知らせましょう!
config/modules.config.phpに以下の内容を追記します。
// これは、config/modules.config.phpの内容です。
return [
/* ... */
'Application',
'Album',
'Blog', // ここを追記します。
];
ちなみに ‘Application’は、デフォルトで入っているモジュールで、‘Album’は、以前の記事で作成したAlbumモジュールです。
コンポーネントなどを追加すると、コンポーネント名が追加されていきます。
これで、BlogモジュールをModuleManagerに認識させることができました!
次からは、Blogモジュール内のControllerやModelを実装していきます。
コメント