fuelphpで必ずやってる設定などまとめ

完全に自分仕様になっているが毎回同じ設定を過去のプロジェクトのをみながら都度やっていて時間も無駄なのでまとめておく

fulephpで準備されている機能の準備

日本語を使う準備

fuel/app/config/config.phpを編集

//81行目くらい
'language'           => 'ja', // Default language
'language_fallback'  => 'en', // Fallback language when file isn't available for default language
'locale'             => 'ja_JP.UTF-8', // PHP set_locale() setting, null to not set
//88行目くらい
'encoding'  => 'UTF-8',
validation回りの準備

validationで使うメッセージ設定
fuel/app/lang/ja/validation.phpを作成
FuelPHPのエラーメッセージ日本語化 - BTT's blog
内容はいつもこちらのサイトのものをそのままコピってます

validationファイルを用意
あとでutilフォルダなるフォルダを準備しますが、そこにオリジナルのvalidationまわりのメソッドを実装するvalidations.phpを準備します

fuel/app/classes/util/validations.php

class Util_Validations
{
    public static function _validation_alphanum($val)
    {
        return 1 <= preg_match('/^[a-zA-Z0-9]+$/',$val);
    }
    
    public static function _validation_numeric($val)
    {
        return is_numeric($val);
    }
}

で使う場合はこんな感じで使ってます

$val = Validation::forge();
$val->add_callable('Util_Validations');
ログ設定

fuel/app/config/config.phpを編集

108行目くらい
'log_threshold'    => Fuel::L_DEBUG,

※不要なログもけっこう出て見づらくなってしまうのですが、落ち着くまでは基本的に見ておきたい性格なのでこの設定にしています

logsフォルダに書き込み権限付与

chmod 0777 -R fuel/app/logs
email設定

fuel/app/config/config.phpを編集

260行目くらい
コメントアウトされてるのを外す
'always_load' => array
);

273行目くらい
'packages'  => array(
    'email',
),

emailはほぼ使うので必ず設定してます

データベース設定

fuel/app/config/development/db.php
fuel/app/config/staging/db.php
fuel/app/config/production/db.php
DBを使わない場合は不要ですが、使わない案件が今までないので必ずやってます

自分が勝手に毎回している設定

これ以降はさらに自分仕様のメモです

アプリ内定義系ファイルの作成

定数や定義系の配列はここで管理します

fuel/app/config/define.php
※例

return array(
  "db" => array(
    "users" => array(
      1 => "男性",
      2 => "女性",
    )
  ),
);
便利関数を準備
mkdir fuel/app/classes/util

vi fuel/app/classes/util/validations.php
<?php
class Util_Validations
{
}

こんなイメージ

DB共通処理

fuel/app/classes/model/common.php

<?php
class Model_Common extends Model
{
    public static function getOne($query,$params)
    {
        try {
            $result = DB::query($query)->parameters($params)->execute()->as_array();
            Log::debug('sqlデバッグ::'.DB::last_query());
            return empty($result) ? array() : $result[0];
        } catch (Exception $e) {
            Log::error('sqlエラー::'.$e->getMessage());
            return false;
        }
    }
    
    public static function getAll($query,$params)
    {
        try {
            $result = DB::query($query)->parameters($params)->execute()->as_array();
            Log::debug('sqlデバッグ::'.DB::last_query());
            return empty($result) ? array() : $result;
        } catch (Exception $e) {
            Log::error('sqlエラー::'.$e->getMessage());
            return false;
        }
    }

    public static function getAllNum(&$all_num,$query,$params)
    {
        try {
            $result = DB::query($query)->parameters($params)->execute()->as_array();
            Log::debug('sqlデバッグ::'.DB::last_query());
            $result_num = DB::query("SELECT FOUND_ROWS() AS ct")->execute() ->as_array();
            Log::debug('sqlデバッグ::'.DB::last_query());
            $all_num = $result_num[0]['ct'];
            return empty($result) ? array() : $result;
        } catch (Exception $e) {
            Log::error('sqlエラー::'.$e->getMessage());
            return false;
        }
    }
    

    public static function getAllNumWithCount(&$all_num,$query,$params)
    {
        try {
            $result = DB::query($query)->parameters($params)->execute()->as_array();
            Log::debug('sqlデバッグ::'.DB::last_query());
            $result_num = DB::query("SELECT FOUND_ROWS() AS ct")->execute() ->as_array();
            Log::debug('sqlデバッグ::'.DB::last_query());
            $all_num = $result_num[0]['ct'];
            return empty($result) ? array() : array('list'=>$reuslt,'count'=>'all_num');
        } catch (Exception $e) {
            Log::error('sqlエラー::'.$e->getMessage());
            return false;
        }
    }    

    public static function execute_insert($table,$data)
    {
        try {
            $r =DB::insert($table)->columns(array_keys($data))->values(array_values($data))->execute();
            Log::debug('sqlデバッグ::'.DB::last_query());
            return $r[0];
        } catch (Exception $e) {
            Log::error('sqlエラー::'.$e->getMessage());
            return false;
        }
    }

    public static function execute_update($table,$id,$data)
    {
        try {
            $result = DB::update($table)->set($data)->where('id',$id)->execute();
            Log::debug('sqlデバッグ::'.DB::last_query());
            return $result;
        } catch (Exception $e) {
            Log::error('sqlエラー::'.$e->getMessage());
            return false;
        }
    }

    public static function execute_update_where($table,$where,$data)
    {
        try {
            $result = DB::update($table)->set($data)->where($where)->execute();
            Log::debug('sqlデバッグ::'.DB::last_query());
            return $result;
        } catch (Exception $e) {
            Log::error('sqlエラー::'.$e->getMessage());
            return false;
        }
    }
}

僕はormは使ってないので最低限のsqlが実行できるメソッドを実装してます。
あとは、上でも書きましたが落ち着くまで基本ログは残したいので実行した全てのsqlを残すように実装してあります

アプリでの共通処理 ~ Controller

fuel/app/classes/controller/app.php

class ValidationException extends Exception {}

class Controller_App extends Controller
{
  public function before()
  {
        //定義ファイル読み込み
        Config::load('define',true);

        //アクセスログ出力
        Log::debug(sprintf(
            "ACCESS\t%s\t%s\t%s\t%s\t%s\t%s"
            ,Input::server("REMOTE_ADDR")
            ,Input::server("HTTP_USER_AGENT")
            ,urldecode(Input::server("REQUEST_URI"))
            ,Input::server("HTTP_REFERER")
            ,json_encode(Input::get())
            ,json_encode(Input::post())
        ));
  }
}

定義系ファイルの読込みやサイト共通で行いたい処理(ログイン認証回りとか)コントローラをあらかじめ準備しておきます。これもコントローラが複数になる場合は自分は必ず用意してます。

エラー処理の実装

エラー処理について、こちらの記事の設定を行います

さいごに

完全に自分仕様の部分で他人の参考にならないとは思いますが、自分的にはこれくらいかな、、、

さくらのレンタルサーバーfuelphpをセットアップしたあとにこれらの設定を行います
※参考
さくらのレンタルサーバでのfuelphpセットアップ手順 - とりあえずphpとか

※追記項目
email設定(2015/2/15)


以上です