🗒️

Slim4 に dotenv と migration の機能を追加していい感じにする

2022/01/12に公開

環境

  • Slim4 (Skelton じゃない方だが、どっちでも行けそう?)
  • PHP7.4 (or later)
  • MySQL5.7 (MariaDB)
  • dotenv ライブラリ: vlucas/phpdotenv@5.4.1
  • マイグレーションライブラリ: robmorgan/phinx@0.12.9

dotenv ライブラリの準備

PHP 向けの dotenv ライブラリは2種類くらいメジャーなのがあるが、今回は vlucas/phpdotenv を採用した。

インストール

composer require vlucas/phpdotenv

設定ファイル作成

touch .env

自分の環境に合わせて、設定内容を書く。

DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=username
DB_PASSWORD=password
DB_CHARSET=utf8

マイグレーションライブラリの準備

マイグレーションのライブラリも有名なものはいくつかあると思うが、今回は phinx を採用した。

インストール

composer require robmorgan/phinx

設定ファイル作成

まず以下のコマンドで設定ファイル phinx.php を生成する。

vendor/bin/phinx init .

次に、中身を書き換える。
初期状態では配列をリターンしているだけになっているので、先頭で dotenv を読み込ませる。

<?php

$dot_env = __DIR__. '/.env';
if (is_readable($dot_env)) {
    $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
    $dotenv->load();
}

続けて、配列の中身を書き換える。

return
[
    'paths' => [
        ...
    ],
    'environments' => [
        'default_migration_table' => 'phinxlog',
        'default_environment' => 'production',
        'production' => [
            'adapter' => 'mysql',
            'host' => $_ENV['DB_HOST'] ?? 'localhost',
            'name' => $_ENV['DB_DATABASE'] ?? 'production_db',
            'user' => $_ENV['DB_USERNAME'] ?? 'root',
            'pass' => $_ENV['DB_PASSWORD'] ?? '',
            'port' => $_ENV['DB_PORT'] ?? '3306',
            'charset' => $_ENV['DB_CHARSET'] ?? 'utf8',
        ],
        'development' => [
            'adapter' => 'mysql',
            'host' => $_ENV['DB_HOST'] ?? 'localhost',
            'name' => $_ENV['DB_DATABASE'] ?? 'development_db',
            'user' => $_ENV['DB_USERNAME'] ?? 'root',
            'pass' => $_ENV['DB_PASSWORD'] ?? '',
            'port' => $_ENV['DB_PORT'] ?? '3306',
            'charset' => $_ENV['DB_CHARSET'] ?? 'utf8',
        ],
        'testing' => [
            ...
        ]
    ],
    ...
];

DB の設定は dotenv で設定するので、production/development と分けなくても良いケースもあるので、不要であれば development の配列を丸ごと削除しても良いかも。

また、今回は dotenv を利用したが、サーバで環境変数を設定できるのであれば、先頭部分を削除し $_ENV のところを $_SERVER に変えるだけで済むと思う。

それでは良き Slim ライフを。

Discussion