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
コマンドを実行してライブラリをインストールします。
{
"require": {
...,
"myclabs/php-enum": "^1.5"
}
}
2. Enumクラスを作る
今回は例としてCakePHPのModelディレクトリの下にEnumディレクトリを作り、ユーザー情報に関するEnumクラスUser.php
を作成します。
インストールしたphp-enumのライブラリを継承し、Enumクラスを作ります。
<?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でサポートする為の記法です。
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を使って年越しそばの作り方を紹介します(嘘です)