Fuelphp:データベースを複数使用する

Fuelphpデータベースに接続する時の設定ファイルは下記の場所にあります。

/fuel/app/config/db.php
/fuel/app/config/development/db.php

データベースの設定ファイルに別のデータベース情報を追加することで複数のデータベースを使用することが可能です。

下記にFuelphp複数データベース接続する為の設定方法・使用方法をメモします。


設定方法

下記のファイルに新しく設定するデータベース情報を追加します。

「fuel/app/config/db.php」

修正前

return array(

	'active' => 'default',

	'default' => array(
		'type'        => 'pdo',
		'connection'  => array(
			'persistent' => false,
		),
		'identifier'   => '`',
		'table_prefix' => '',
		'charset'      => 'utf8',
		'enable_cache' => true,
		'profiling'    => false,
	),

	'redis' => array(
		'default' => array(
			'hostname'  => '127.0.0.1',
			'port'      => 6379,
		)
	),

);

修正後

return array(

	'active' => 'default',

	'default' => array(
		'type'        => 'pdo',
		'connection'  => array(
			'persistent' => false,
		),
		'identifier'   => '`',
		'table_prefix' => '',
		'charset'      => 'utf8',
		'enable_cache' => true,
		'profiling'    => false,
	),

	'redis' => array(
		'default' => array(
			'hostname'  => '127.0.0.1',
			'port'      => 6379,
		)
	),

	// 追加
	'sample' => array(
		'type'        => 'pdo',
		'connection'  => array(
			'persistent' => false,
		),
		'identifier'   => '`',
		'table_prefix' => '',
		'charset'      => 'utf8',
		'enable_cache' => true,
		'profiling'    => false,
	),

);

「fuel/app/config/development/db.php」

修正前

return array(

	'default' => array(
		'connection'  => array(
			'dsn'        => 'mysql:host=localhost;dbname=hoge',
			'username'   => 'ユーザー名',
			'password'   => 'パスワード',
		),
	),

);

修正後

return array(

	'default' => array(
		'connection'  => array(
			'dsn'        => 'mysql:host=localhost;dbname=hoge',
			'username'   => 'ユーザー名',
			'password'   => 'パスワード',
		),
	),

	// 追加
	'sample' => array(
		'connection'  => array(
			'dsn'        => 'mysql:host=localhost;dbname=sample',
			'username'   => 'ユーザー名',
			'password'   => 'パスワード',
		),
	),

);

使用方法

追加したデータベースに接続する場合は、下記のように記述します。

$query = \DB::select()->from('test');
$query->execute('sample')->as_array();

execute()に追加したデータベースを指定するとデータを参照することができます。


Fuelphp:モジュール化をする時の方法

FuelphpMVCモジュール化する時の設定方法をメモします。

開発を進めていくとファイルが膨大になってしまって、開発効率が落ちることがあります。
モジュール化することでMVCをまとめることができるので、開発する時にファイル等を参照しやすくなります。

また、ディレクトリごとコピーしてしまえば簡単に複製することができるので、開発効率も上がると思います。

FuelphpMVCモジュール化する場合の記述方法設定方法等を下記に記載します。


Fuelphpでモジュール化する方法

Fuelphpのディレクトリ構造はモジュール化をしない場合、
下記のような構造になっています。

fuelphp_module_1

モジュール化する場合は「modules」ディレクトリの中にモジュールごとに設置します。
今回は「hoge」というモジュールを作成しています。

fuelphp_module_2

コントローラー、モデル、ビューをモジュール内に設置します。


config.phpの設定

モジュール化を設定する為に「/fuel/app/config/config.php」を編集します。
下記のように「module_paths」を設定します。
※複数設定することも可能です。

	'module_paths' => array(
		APPPATH.'modules'.DS
	),

namespaceを設定

コントローラー、モデルにnamespaceを記述します。
下記は「hoge」というモジュールを作成した場合です。

※namespaceはモジュール名と同じにしてください。

controller

<?php

namespace Hoge;

use Hoge\Model\Hoge;

class Controller_Hoge extends \Controller_Template
{

model

<?php

namespace Hoge\Model;

class Hoge extends \Model {

モジュールの外にあるクラスを呼ぶ場合は、「\」を付けます。
下記のように「\」を先頭に記述します。

※モジュール内のクラスを呼ぶとき以外は全て付与しないとエラーになります。

\Uri::segment(1);

モジュール化を使用した方がファイルが参照しやすくなるので、とても便利です。
大きいプロジェクトなどでは最初の段階で設定しておいた方がいいと思います。

Fuelphp:Fuelphpでcoreクラスを拡張する方法

フレームワークを使用してシステムを開発しているとコアクラスを変更したり、処理を追加したい場合があります。
あまりコアクラスは変更したくないので、コアクラスを拡張して処理を記述します。

今回はFuelphpcoreクラス拡張し、処理を追加したり、オーバーライドする方法をメモします。


Fuelphpでcoreクラスを拡張する

Paginationクラスを拡張する場合、「fuel/app/classes」の直下に「pagination.php」を作成します。
作成した「pagination.php」に処理を追加したり、オーバーライドしたい処理を記述します。
※「fuel/core/classes/pagination.php」をオーバーライドします。

<?php

class Pagination extends Fuel\Core\Pagination
{
    // 処理を記述

}

処理を記述したら、「fuel/app/bootstrap.php」を下記のように編集します。
作成した「pagination.php」を読み込むように記述します。

Autoloader::add_classes(array(
	// Add classes you want to override here
	// Example: 'View' => APPPATH.'classes/view.php',
	'Pagination' => APPPATH.'classes/pagination.php',
));

「bootstrap.php」に拡張したクラスを追加すれば、拡張した処理を使用することができます。


Fuelphp:日本語のエラーメッセージを設定する

FuelphpValidationクラスを使用し、エラーを出力した際にエラーメッセージ日本語で出力する方法をメモします。
最初の設定では英語で表示されるので。

エラーメッセージは日本語で出力することが多いと思うので、最初に設定してると実装しやすくなると思います。

また、エラーメッセージを個別に設定して、設定ファイルの内容を上書きする方法をメモします。


日本語のエラーメッセージを設定

設定ファイルで日本語のファイルを読み込むように設定します。
「fuel/app/config/config.php」の「language」の箇所を「ja」に変更します。

    /**
     * Localization & internationalization settings
     */
    'language'           => 'ja', // Default language
    'language_fallback'  => 'en', // Fallback language when file isn't available for default language
    'locale'             => 'ja_JP.utf8', // PHP set_locale() setting, null to not set

    'encoding'  => 'UTF-8',

日本語のエラーメッセージファイルを設定します。
「fuel/app/lang/ja/validation.php」を作成し、日本語のエラーメッセージを記述します。
※エラーメッセージは出力したい内容に変更してOKです。

<?php

return array(
    'required'      => ':label は必須入力です。',
    'min_length'    => ':label は、:param:1 文字以上で入力して下さい。',
    'max_length'    => ':label は、:param:1 文字以下で入力して下さい。',
    'exact_length'  => ':label は、:param:1 文字で入力して下さい。',
    'match_value'   => ':label は、使用できない文字が含まれています。使用可能な文字 [:param:1] ',
    'match_pattern' => ':label は、:param:2で入力して下さい。',
    'match_field'   => ':label は、:param:1 と異なっています。',
    'valid_email'   => ':label は メールの形式で入力して下さい。',
    'valid_emails'  => ':label に、有効でないメールアドレスが含まれています。',
    'valid_url'     => ':label は、有効なURLではありません。',
    'valid_ip'      => ':label は、有効なIPアドレスではありません。',
    'numeric_min'   => ':label には、:param:1 より大きい数値を入力して下さい。',
    'numeric_max'   => ':label には、:param:1 より小さい数値を入力して下さい。',
    'valid_string'  => ':labelは:param:2で入力してください。',
);

上記の設定が完了したら、設定したエラーメッセージで出力されます。

fuelphp_error1

個別に設定する場合は「set_message()」を使用して設定します。

$validation = \Validation::forge();

$validation->set_message('required', ':label は必ず入力してください。');

$validation->add('name', 'name')
    ->add_rule('trim')
    ->add_rule('required');

エラーメッセージが「set_message()」で指定した内容で出力されます。


Fuelphp:バリデーションのルールを追加する

Fuelphpで用意されているバリデーションのルール以外に
自分で作成したバリデーションを追加したい場合があります。

コアクラス拡張することによって、新しいバリデーションのルールを作成することができます。

今回はFuelphpValidationクラス拡張し、バリデーションのルールを追加する方法をメモします。


バリデーションのルールを追加する方法

「fuel/app/classes」に「myvalidation.php」を作成します。

作成した「myvalidation.php」に追加したいバリデーションのルールを記述します。
下記は半角英数字チェックを追加した場合です。
追加する時は「_validation_」プレフィックスを付けて作成します。

<?php
class MyValidation
{
    // 半角英数字チェック
    public static function _validation_alphanum($data)
    {
        if(!empty($data)) {
            if (preg_match("/^[a-zA-Z0-9]+$/", $data)) {
                return true;
            }
            else {
                return false;
            }
        }
        return true;
    }
}

作成したバリデーションを使用する場合は下記のように記述します。
「add_callable()」で作成したバリデーションのクラスを読び出します。
後は「add_rule()」に作成したバリデーションを記述します。

$validation = \Validation::forge();
$validation->add_callable('myvalidation');

$validation->add('id', 'ID')
	->add_rule('required')
	->add_rule('alphanum');
$validation->run();

エラーメッセージを設定する場合は「fuel/app/lang/ja/validation.php」に新しいエラーメッセージを追加します。

return array(
	'alphanum' => ':labelは、半角英数字で入力してください。',
);