LoginSignup
5
5

More than 5 years have passed since last update.

Phalconプロジェクト環境で対話シェル

Last updated at Posted at 2013-12-15

Phalcon に限った話では無いのですが、デバッグ作業やモデルを直接操作して確認したいことがあるとき、PHP の対話シェルがとても便利です。

PHP の対話シェルとは

↓こんな感じで操作できます。

対話シェル
[user@host ~]$ php -a
Interactive mode enabled

php > echo "Hello, world!\n";
Hello, world!
php > 

こんな環境で、Phalcon プロジェクトのモデルやら何やらが直接操作できたらデバッグ作業が捗る、というお話です。

使える条件

PHP 5.1.0 以降で、コンパイルオプション --with-readline を付けてコンパイルされた PHP 環境

これが選択できない場合、PEAR で導入できる php shell をインストールして使うという方法もあります。

Phalcon プロジェクト環境で使う

↓例えばこんな塩梅で書いたモデルを直接いじり倒したい

php > $user = Users::findFirst(1);
php > echo $user->getUsername() . "\n";
sukobuto
php > echo $user->setEmail("sukobuto@gmail.com")->save() ? "OK\n" : "NG\n";
OK
php > 

という場合、Phalcon なら 設定・ローダー・サービス の3兄弟を読みこめば OK です。
たとえば↓のような読み込みスクリプトを置いておきます。

app/shell.php
/**
 * Read the configuration
 */
$config = include __DIR__ . "/config/config.php";

/**
 * Read auto-loader
 */
include __DIR__ . "/config/loader.php";

/**
 * Read services
 */
include __DIR__ . "/config/services.php";

次のように読み込みます。
また phalcon.so 等を正しく読み込むため、必ず php.ini を指定します。

対話シェルの起動と3兄弟読み込み
[user@host app]$ php -c /etc/php.ini -a
Interactive mode enabled

php > include "shell.php";
php > 

めんどくさがりなあなたは

これだけ置いとけばいいスクリプトを用意しました。
Linux を使っている場合、以下のスクリプトを app 配下に置きます。

app/shell.sh
#!/usr/bin/expect

set timeout 5
spawn php -c /etc/php.ini -a
expect "php > "
send "\$config = include __DIR__ . \"/config/config.php\";\n"
send "include __DIR__ . \"/config/loader.php\";\n"
send "include __DIR__ . \"/config/services.php\";\n";
interact

php.ini の場所が異なる場合はちゃんと書き換えましょう

このスクリプトは expect というシェルプログラムで実行されます。
インストール済みでない場合はインストールしましょう。

expectインストール
[user@host app]$ sudo yum install expect
実行権限もお忘れなく
[user@host app]$ chmod 700 shell.sh

起動すると...

[user@host app]$ ./shell.sh
spawn php -c /etc/php.ini -a
Interactive mode enabled

php > $config = include __DIR__ . "/config/config.php";
php > include __DIR__ . "/config/loader.php";
php > include __DIR__ . "/config/services.php";   // ここまで自動!!
php > 

オートローダも問題なく動作します。
心置きなくいじり倒しましょう。

コメントを下さった localdisk さんの影響でスクリーンキャストを撮ってみました。

スクリーンキャスト

その他の環境 (CakePHP, Symfony2, etc...) について

よくわかりません。
Phalcon は DI コンテナがシンプルで単純に読みこめばできたので簡単でしたが、ほかのフレームワークだとどうなるのでしょうか...

5
5
1

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
5
5