インスパイヤされて掲示板を作りたくなった(番外篇)

  • 3
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

しぇるしぇるしぇる…

(この記事は4の直後に書かれたけれど全然時間がとれなくて話が進んでないので番外扱ひで…)

過去ログ

スレ 内容
インスパイヤされて掲示板を作りたくなった(1) PHPとComposer、あとべんりなライブラリ
インスパイヤされて掲示板を作りたくなった(2) SQLite3のスキーマ設計とTwigテンプレート
インスパイヤされて掲示板を作りたくなった(3) ルーティングとモデルの説明
インスパイヤされて掲示板を作りたくなった(4) ドキュメント生成とモデル、SQL
インスパイヤされて掲示板を作りたくなった(番外篇) ← イマココ

PHPとの対話を

Rubyにはirbってコマンドがあったり、Ruby on Railsにはrails consoleってコマンドがあったりして、ターミナルからコードを実行できたりする。

大丈夫、別にPHPだって負けてないし、Railsみたいな巨大なフレームワークがなくたって実現できるから。

例によってライブラリを入れてみる。詳しくはPHPを「シェル化」する [psy/psysh] - 超PHPerになろうに書いたんだけど。

composer require --dev psy/psysh

で、実行ファイルを作ってみよう。トップレベルにshellってファイル名にしておく。特に深い意味はないけど、拡張子は不要。

shell
#!/usr/bin/env php
<?php
namespace InspireBBS;

// Composerのオートローダーを読み込む
require_once __DIR__ . '/vendor/autoload.php';
// ほかに初期化用のPHPファイルがあれば読み込んでおく
// require_once …
$dotenv = new \Dotenv\Dotenv(__DIR__);
$dotenv->overload();
$dotenv->required('DB_DSN')->notEmpty();

echo __NAMESPACE__ . " shell\n";

$config = new \Psy\Configuration();
$config->addCasters([
    'InspireBBS\Model\ModelInterface' => '\InspireBBS\Caster::castModel',
]);
$sh = new \Psy\Shell($config);
// シェル起動直後にプロジェクトのnamespaceを設定する
$sh->addCode(sprintf("namespace %s;", __NAMESPACE__));

$sh->run();

// 終了時に表示するメッセージ
echo "Bye.\n";

ファイルを保存したらchmod +x ./shellで実行権限をつけておく。で、./shellで実行する。

スクリーンショット 2016-02-24 2.29.13.png

で、たぶんこれだけではモデルを綺麗に表示できないので、 tests/Caster.php をコピペして自分のプロジェクトに持ってくると良さそう。ModelInterfaceはこれから実装します。

今回のおまけ

Emacsを使ってたら、今回作ったシェルをEmacs内から簡単に呼び出して利用できるよ。まったく便利すぎて困っちゃうんだが、これを起動するにはM-x com (省略されました。全てを読むにはわっふるわっふると書き込んでください)

スクリーンショット 2016-02-24 2.28.01.png