【Laminas】Blogを作ってみる!

Laminas

どーも!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を実装していきます。

コメント

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