同じアプリケーションをFuelPHPで実装してみます。いうFuelPHPパッケージを利用します。fuel-packages/fuel-twilioFuelPHPプロジェクトを作成した後、まずは、fuel-twilioパッケージをセットアップしていきます。fuel/app/configにコピーしてアクセスキーなどを設定します。TOKENは、Twilioのダッシュボードで確認できます。fromには、発信元の電話番号を指定します。インストールされていない場合は、インストールしておきます。reload[/bash]fuel-twilioパッケージのセットアップは以上です。Reminderを実装して行きます。homeコントローラを作成して、必要なアクションを追加します。/path/to/fuel/app/classes/controller/home.php[/bash]Viewが必要なのはindexだけなので、それ以外のビューは削除しておきます。fuel/app/views/home/goodbye.php[/bash]Twilioからのリクエストの応答は、Twilio::twimlを利用してXMLを生成するので、Controller_Restを継承したコントローラに分けることはせずController_Homeですべて実装しています。ルートへのアクセスをすべてHomeControllerのアクションにルーティングします。Documentation次に、各アクションを実装していきます。Reminderのhowtos/appointmentreminder/index.html.erbをFuelPHPのindex.phpに実装します。Flashメッセージは、template.phpのコードを利用できるので省略します。?>[/php]homeコントローラのindexアクションはそのまま利用します。アクション元のサンプルのhowtos/appointmentreminder/appointmentreminder_controller.rbのmakecallアクションをFuelPHPのhomeコントローラのmakecallアクションとして実装します。‘.Input::post(‘number’).’...’);Response::redirect(‘/’);}[/php]ハイライト箇所がTwilioから電話をかけるコードです。他はエラーハンドリングになります。homeコントローラのreminderアクションに実装します。Twilio\Twilio_Twiml();$question->say(‘こんにちはこの電話はTwilioから発信しています。明日の午前9時からアポイントメントがあります。‘ja-jp’));$question->say(‘このメニューを繰り返す場合は1を、順路を聞く場合は2を、終了する場合は3をプッシュしてください。$twiml->render();}[/php]元のサンプルではレスポンスのXMLをビューで構築していますが、fuel-twilioにはTwilio\Twilio_Twimlクラスが用意されているので、アクション内で応答を構築して返しています。メッセージは、日本語にしています。日本語の場合は、Sayの属性languageにja-jpを指定します。directionsアクションhowtos/appointmentreminder/appointmentreminder_controller.rbのdirectionsアクションとhowtos/appointmentreminder/directions.xml.builderをhomeコントローラのdirectionsアクションに実装します。Twilio\Twilio_Twiml();$twiml->say(‘アポイントメントは通り近くの建物で行われます。goodbyeアクションgoodbyeは元記事には載ってせんが以下のように実装しました。Twilio\Twilio_Twiml();$twiml->say(‘さようなら。同じ動作のアプリケーションをFuelPHPできました。コントローラをバッチ実行に兼用するCodeIgniterから比べると、この辺りは後継のFuelPHPの方が使いやすくなっています。FuelPHPのタスクは非常にシンプルな仕組みなので、ちょっとモデルの実装を確認するときなどにも割と重宝するときもあります(すべてにテストがかければいいんですけど。サンプルのタスクが、あるので実行してみます。|HHHHH|アスキーアートのロボットが表示されます。wタスクの実行は、oilコマンドにクラス名を指定します。指定したクラスを定義します。処理は、タスククラスのインスタンスメソッドに実装します。いうメソッドを実装しています。Oilコマンドに、タスクの生成コマンドも用意されています。ドキュメントこのタスクを生成する場合は以下のようにoilコマンドを実行します。メソッドが実行されます。以外の名前のメソッドを実行するには”:”に続けてメソッド名を指定します。メソッドには引数が2つありますが、引数はタスク名に続けて空白区切りで指定します。指定されているので、グローバルから指定する必要があります。Greetingのロジックをモデルに移した場合。Scaffoldingがデフォルトで含まれています。会社のモデルの管理画面を作成したときの手順です。所属グループによって判断されます。Authパッケージを有効にします。10000,);Authパッケージ用のテーブルをデータベースに追加します。Admins”のAuth_Groupに所属している必要があります。管理者かどうかをチェックしているのがわかります。グループが管理者グループとしてデータベースに登録されています。ユーザーにグループを設定する画面はないので、データベースを直に修正して管理者を設定します。以下に管理画面が作成されています。説明されていますが、改めてメモ。WebサイトでFuelPHPアプリを動かすWEBサイトを作成します。リポジトリの選択Bitbucketとの接続を許可しますリポジトリを選択します今回はbitbucketのリポジトリを利用しました。チェックボタンをクリックするとWebサイトの作成が始まります。新しいWebサイトが追加されましたデプロイを確認fuelblogを選択し[デプロイ]タブを開くと、gitからcloneされたことを確認できます。デプロイはされていますが、まだデータベースの設定やmigrationはされていないので動きません。データベースの設定データベースのホスト名、データベース名、接続ユーザの情報は[構成]タブの[接続文字列]で確認できます。コミットしておきます。updateとマイグレーションを実行するように設定します。選択してダウンロードし、インストールします。以下のコマンドでスクリプトを生成します。OK以下の2つのファイルができます.deploymentdeploy.shdeploy.shの最後にComporserとマイグレーションの処理を記述します。successfully."oilの実行は、FUEL_ENV=productionを指定しなくても、[アプリケーション設定]が適用されます。master新たにデプロイが実行されます。updateとマイグレーションが正しく実行されたことが確認できます。アクセスしていたので、publicディレクトリをルートディレクトリとして指定し直します。プロジェクト直下に、以下のWeb.configを作成して、pushするとpublicなしでアクセスできるようになります。</system.webServer></configuration>補足SDKのアンインストール手順メモ。Terminal..gitmodulesは、Windowsのパス区切り文字に置き換えなくても動く。updateが失敗する(かなり頻発)が、そのときは何回か再試行または同期しなおすと正常実行される。FuelPHP関連のsubmoduleは、FuelPHP自体をアップデートするとき以外はsubmoduleを外しておいた方が良さそう。2017年8月24日FuelPHPでユニークバリデーションを追加するFuelPHPは、標準ではユニークチェック用のバリデーションルールが用意されていないので、ユニークチェックをしたい場合は独自のバリデーションを拡張する必要があります。独自バリデーションの追加方法が記載されていますが、この例がちょうどユニークチェックの追加方法になっています。以下のコードは、ドキュメントの例に、idの比較を含めて編集時にも対応していました。「:value」は既に登録されています。...}また、idは、postパラメータに含める必要があるため編集フォームに含めます。?>ここは、ちょっと気持ちが悪い。他にいい方法が思いつかない。環境ごとにログの出力レベルを変えるFuelPHPでは、config直下と同じ設定が環境ごとの設定にある場合上書きされます(参照:環境と設定)。作成して、以下を記述すれば適用されます。