レンタルサーバでFuelPHPをインストールしてAPIを動かしてみる | フリーランスエンジニアのお気楽日記

フリーランスエンジニアのお気楽日記

パソコンや家電のレビューやうんちくを中心に綴ります。

久しぶりのプログラミングネタ。最近Laravel/Lumen、FuelPHPが仕事で顔をきかせてきたので、趣味で使うフレームワークをFuelPHPに切り替えようと手を動かしてみた。

まずは環境としてFuelPHPをレンタルサーバにインストール。入れようとしているサーバでcomposerが動かないのでZIPを落としてインストール。アーカイブはFuelPHPの公式サイトからダウンロードできる。今だとver.1.8.0らしい。

アーカイブを展開してサーバに配置。publicディレクトリは公開ディレクトリだろうからサーバ内の公開ディレクトリのサブディレクトリとして配置。他はアプリケーションディレクトリのサブディレクトリとして配置。いつもサイト別にドメイン名でディレクトリを切ってその下に配置する癖があるので、結果下記の様になった。今回はサブドメ設定。

username/
 ├ app/
 │ └ test.hoge.com/
 │   └ fuel/
 │     └ app/
 │     └ core/
 │     └ packages/
 │     └ vendor/
 └ public_html/
   └ test.hoge.com/
     └ assets/
     └ .htaccess
     └ favicon.ico
     └ index.php
     └ web.config

あとは幾つかファイルを修正。

public_html/test.hoge.com/.htaccess
# Remove index.php from URL
RewriteCond %{HTTP:X-Requested-With} !^XMLHttpRequest$
RewriteBase /
RewriteCond %{THE_REQUEST} ^[^/]*/index\.php [NC]
RewriteRule ^index\.php(.*)$ $1 [R=301,NS,L]

public_html/test.hoge.com/index.php
define('APPPATH', '/<ユーザディレクトリ>/username/app/test.hoge.com/fuel/app/');
define('PKGPATH', '/<ユーザディレクトリ>/username/app/test.hoge.com/fuel/packages/');
define('COREPATH', '/<ユーザディレクトリ>/username/app/test.hoge.com/fuel/core/');

app/test.hoge.com/fuel/app/config/config.php
'language' => 'ja',
'locale' => 'ja_JP.UTF-8',
'encoding' => 'UTF-8',
'default_timezone' => 'Asia/Tokyo',

これだけでFuelPHPのウェルカムページは表示できた。素直だなぁ、で次はAPIの実装。
とりあえず固定値を返すだけの空API。

app/test.hoge.com/fuel/app/classes/controller/hello.php

class Controller_Hello extends Controller_Rest
{
    protected $format = 'json';

    public function get_world()
    {
        $list = array(
            'string' => Input::get('string'),
            'int' => array(
                10, 20, 30
            ),
        );
        return $this->response($list, 200);
    }
}

じゃあ実行してみますか。

$ curl -i http://test.hoge.com/hello/world?string=php
HTTP/1.1 200 OK
Date: Sun, 14 Aug 2016 23:51:26 GMT
Server: Apache
X-Powered-By: PHP/5.3.29
Transfer-Encoding: chunked
Content-Type: application/json

{"string":"php","int":[10,20,30]}

ふむふむ。簡単。
今回はコントローラのformatプロパティでjsonを指定したけど、未指定でAPIのエンドポイントに.jsonもしくは.xmlを付与すれば返却形式を指定できるっぽい。

今更ながら、FuelPHPはグッド。個人的には軽量な薄いフレームワークが好きなので一気にFuelPHPに乗り換えても良さそうな勢いなんだけど、あと確認するのはDB、バッチ処理、画面周りを見て必要ならカスタマイズですかね。