FuelPHP1.8を使うまで

簡易的なWEBアプリを作るにはモッテコイでお馴染みFuelPHP。
数年ぶりに使ったらすっかり使い方を忘れてしまった…!
バージョンアップしてるのもあるしね、仕方ないんじゃないですかね?へへへ

FuelPHPを使うにあたって、何をしたかのメモ。

用意

composer入って無ければ入れて、アップデートもしておく

curl -sS https://getcomposer.org/installer | php
sudo composer self-update

システム名先に考えるのめんどいので、作るディレクトリまで移動(cd)してから

composer create-project fuel/fuel --prefer-dist .

日本語用ファイルを作っておく

何かログが無駄に作られるの防止策。
空でも置いておけばエラーが出ないので、空で作成。
解る人は中身を作ったらいいのです。

fuel/app/lang/ja/model.php

<?php
return array(
    'model'=>array(
    )
);

fuel/app/lang/ja/selector.php

<?php
return array(
);

共通定数を作る

どこでも呼び出せる共通変数とかここに置いておくイメージ。
もちろん配列を設定することも出来る。

fuel/app/config/profile.php

return array(
    'unko' => 'くさい',
);

呼び出し方1

Config::load('profile', true);
echo Config::get('profile.unko');

呼び出し方2

Config::load('profile', 'bbbb');
echo Config::get('bbbb.unko');

GIT無視リスト(.gitignore)更新

ソースコードエディタ使ってると、ワークスペース保存用のファイルを作るので、それを除外する。

nbproject/
*.code-workspace
.idea

自分はこんな感じだが、自分の環境に合わせて設定するといい。
『composer.phar』は外しても外さなくてもどっちでもいいかな…

/fuel/app/logs/*/*/*
/fuel/app/cache/*/*

通常のこれだと環境毎に分けられたファイルは対象になってめんどくさい。
そのディレクトリ以下は全て管理対象外とするため、下記のように変更する。
追加で仮ファイル置き場(/tmp)は個人的に不要と判断し、除外対象とした。

/fuel/app/logs/*
/fuel/app/cache/*
/fuel/app/tmp/*

public/.htaccess編集

環境変数を場所毎にイチイチ設定するのはメンドイから、自動的に置いた場所で判断するように変更。

SetEnvIf Host ^localhost$ FUEL_ENV=development
SetEnvIf Host ^example.com$ FUEL_ENV=production

『MultiViews』対応に困ることがあるので排除指定をしておく。

Options +FollowSymLinks -Indexes -MultiViews

詳しくはmod_rewrite効かず、 [negotiation:error]

migrationsを使いDB接続

migrationsを使ってDBを接続するには、インストールしただけでは設定されていない『orm』の設定が必要。
『php oil g~』が何もしないで使えるんだから、最初から使えるようにしてくれてもいいんじゃないかと思わなくもない。
fuel/app/config/config.php
always_loadの以下ormコメントアウトを外して、ついでにauth追加した。

'always_load'  => array(
	'packages'  => array(
		'orm',
		'auth',
	),
),

『orm』有効化しないと下記のようなメッセージが出る。

Error!
ErrorException [ Error ]: Class ‘Orm\Model’ not found

下記、管理画面自動作成を使うために『auth』をついでに有効化がおススメ。

管理画面を作成する

管理画面はログインもセットでoliコマンドで自動的に作ってもらえる。素敵。
FuelPHP1.8で管理画面をサクッと作る

SQLiteを使う!

ローカル環境と本番環境別のDBを使うのがタルい。
『fuel/app/config/db.php』を下記に書き換える。

return array(
    'default' => array(
        'type'        => 'pdo',
        'connection'  => array(
            'dsn'      => 'sqlite:'.APPPATH.'config/db/aaa.sqlite3', // 場所は自由
            'username' => '',
            'password' => '',
        ),
        'charset'  => NULL,
        'table_prefix' => 'fuelphp_',  // 指定無くてもOK。テーブル名の前に付ける。
    ),
);

SQLiteは持ち出し可能ファイルなので共通のため、他の環境の設定ファイル(fuel/app/config/XXX/db.php)は全て消す。

インストールディレクトリで下記みたいなことしておくと作業のヒントになっていい。

php oil g scaffold テーブル名 フィールド名:型 フィールド名:型…

これで作成されるmigrationsは、自動的にid(auto_increment)、created_at・updated_atがついた状態で作成されるから、テーブルにも付けておけば無難かと。
先に管理画面作っちゃった方が面倒くさくない。

SQLiteの場合、migrationsのファイルの内容から
『'unsigned' => true,』『'auto_increment' => true,』を消さないと動かない。
各テーブルに直接、後付することをオススメする。

\fuel\packages\oil\classes\generate.php
を直すよりかは作られたファイルを直した方が無難。

Sessionの保存先をDBにする

DB更新Errorのとき、Session::set_flash(~)に対して、『The session data stored by the application in the cookie exceeds 4Kb.(セッション4KB制限エラー)』が出てしまう。
なので、sessionの保存先を変更する。

『fuel/core/config/session.php』をコピーして『fuel/app/config/session.php』を作る。

//	'driver'	=> 'cookie', // 元々はこう
	'driver'	=> 'db',     // DB指定にする

sessionを保存するDB『sessions』はoliで作れる

php oil r session:create

SQLiteの場合は上記だけでは使えない

『UNSIGNED』『ENGINE』が存在しないものでテーブル作成エラーになる。
下記のように、手動でSQLを実行し作成。

CREATE TABLE `sessions` (
        `session_id` varchar(40) NOT NULL,
        `previous_id` varchar(40) NOT NULL,
        `user_agent` text NOT NULL,
        `ip_hash` char(32) NOT NULL,
        `created` int(10) NOT NULL,
        `updated` int(10) NOT NULL,
        `payload` longtext NOT NULL,
        PRIMARY KEY (`session_id`)
);

『\fuel\core\tasks\session.php』をコピーし『\fuel\app\tasks\session.php』を作成して、DBUtil::create_tableから『unsigned』『InnoDB』の指定を消すという手もある。
fuel\app\migrations以下に002_create_session.php等作っておくのも悪くはない。
『php oil refine migrate』実行時に消えなくて済むしね!

テンプレート分割

上記のコマンド実行のように、php oilで作成されるページは自動的にController_Template継承で作ってくれる。
つまりviews/template.phpを変更していると面倒くさい。
どうしたかという話を別ページに移動した。
FuelPHPでテンプレートを分割する

routes.phpの書き方メモ

fuel/app/config/routes.php

'(:segment)(/:no)?' => '$1/index',

/aaa/123だったらaaa/indexに$this->param('no')=123持ってく。
/aaa/testだったらaaa/indexに$this->param('no')=test持ってく。
/test/123や/testや/test/indexはtest/indexに飛んでく。

名前付きキャプチャ

(?P<お名前>正規表現)で$this->param('お名前')を条件付き取得する。
とても便利。

下記の場合、$this->param('no')を数字に限定する。

'(:segment)(/(?P<no>[1-9][0-9]*))?' => '$1/index',

この辺の条件云々はここが参照になった
【FuelPHP】ルーティングに正規表現(名前つきキャプチャ)を使うと捗る

巧く動くかどうかはここを使えばチェックが簡単。ありがたい!
Rubular: a Ruby regular expression editor and tester

'(:segment)(/(?P<no>[1-9][0-9]*))?' => 'unko/index',

コントローラが何だろうと絶対的にunko/indexに飛ばす。
小規模開発の味方。

コメント

タイトルとURLをコピーしました