LoginSignup
4
3

More than 5 years have passed since last update.

【New Year Calendar】CakePHPでEnumを使用する3分クッキング

Last updated at Posted at 2017-12-30

cakephp_useEnum.png

New Year Calendar 5日目
New Year Calendarって何ぞという方はまずこちらをご覧ください。

今日はCakePHPでEnumを使用する為の3分クッキングを行います。よろしくお願いします。
それでは早速始めましょう。
(基本、キュー◯ー3分クッキングのノリで進めます)

準備

必要な調理器具

  • CakePHP2系

先生「今日はEnumを作るのでCakePHP2系を使います。ただしCakePHP2系はガスコンロのみでIHには対応していないのでご注意下さい。IHに対応してるのは3系からですからね。」
アシスタント「動作は保証されないってことですね。分かります。」

材料

  • Composerライブラリ「myclabs/php-enum」:1つ
  • ソースコメント:目分量
  • やりきるパッション:小さじ1杯

調理手順

1. EnumのComposerライブラリをインストールする

PHPで列挙型を利用する為に独自実装も出来ますが、ここはphp-enumというComposerライブラリを使ってみましょう。

composer.jsonに以下を追加した後、composer installコマンドを実行してライブラリをインストールします。

composer.json
{
  "require": {
    ...,
    "myclabs/php-enum": "^1.5"
  }
}

2. Enumクラスを作る

今回は例としてCakePHPのModelディレクトリの下にEnumディレクトリを作り、ユーザー情報に関するEnumクラスUser.phpを作成します。
image.png

インストールしたphp-enumのライブラリを継承し、Enumクラスを作ります。

User.php
<?php
namespace Sample1\Model\Enum\User;

use MyCLabs\Enum\Enum;

/**
 * @method Status ACTIVE()
 * @method Status INACTIVE()
 */
class Status extends Enum
{
    const ACTIVE = 1;
    const INACTIVE = 2;
}

↑のクラスコメントはライブラリのREADMEに書いてある通りPhpStormでサポートする為の記法です。

image.png

3. Enumクラスをautoloadする

bootstrap.phpでspl_autoload_registerを使ってEnumクラスをautoloadする設定を追加します。

// Autoload model constants
spl_autoload_register(function ($class) {
    // Get file path by namespace
    // e.g. 「Sample1\Model\Enum\User\Status」→「~/app/Model/Enum/User.php」
    if (!preg_match("/Model\\\\Enum\\\\[A-Za-z]+/", $class, $match)) {
        return;
    }
    $filePath = APP . DS . str_replace('\\', DS, $match[0]) . '.php';
    if (file_exists($filePath)) {
        include $filePath;
    }
});

これにて調理完了!

実際に使ってみる

上記で作ったEnumをContollerで実際に参照してみます。

<?php
use Sample1\Model\Enum as Enum;

/**
 * Users Controller
 */
class UsersController extends Controller
{
    public function index() 
    {
        $userStatus = Enum\User\Status::ACTIVE;
        echo $userStatus; // 「1」が出力される
    }

これだけでCakePHPでEnumが使用できるようになりました。

明日は大晦日なのでGolangを使って年越しそばの作り方を紹介します(嘘です)

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3