Posts tagged ‘fuelphp’

■Fuelphpにて環境の振り分け例

bootstrap.php の編集を行い、開発環境や本番環境の振り分けを行う。

例)
・ポートが8080の場合 → staging環境
・ホストが”localhost”の場合 → development環境
・上記に該当しない場合 → production環境

switch (isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : '') {

//テスト環境の場合
	case '8080':
		Fuel::$env = Fuel::STAGING;
		break;

//本番環境の場合(他の条件に該当しない)
	default:
		Fuel::$env = Fuel::PRODUCTION;
		break;
}

switch (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '') {

//開発環境の場合
	case 'localhost':
		Fuel::$env = Fuel::DEVELOPMENT;
		break;
}

考えてみれば単純なことなのにハマったので備忘録に残します。
ハマった時のケースはModule Aから共通Module(例ではModule B)のデータを表示する際にModule AのViewでModule BのModelをどう呼び出すか、というもの。(そもそも設計云々に問題があるというのは割愛します・・・)

■module Aからmodule BのModelを呼び出す場合。

module Aで

\Module::load('B');

と記述し、Module Bを読み込む。
確認方法は、

$loaded = Module::loaded();
var_dump($loaded);

とすれば、呼び出されていることが確認できます。

Modelでデータを取得する際は、

$persons = B\Model_Xxx::find('all');

というように、namespace(module名)を付ければ呼び出すことができます。

 

・・・何でこんなに悩んだんだろう。。。

 

FuelPHPのドキュメントにも例がありますが、FuelPHPのValidationでuniqueチェックを作ってみました。
本家の例ではValidationを拡張する例として記載があります。

http://fuelphp.com/docs/classes/validation/validation.html

 

但し、DBへのInsert時は上記の拡張例で問題ないのですが、Update時は、
更新するレコード自身を含めてしまうとuniqueチェックで引っかかってしまうため、除外する必要があります。
その処理を公式ドキュメントの例を参考にコードを追加してみました。

また、コアクラスを拡張しているため、/fuel/app/bootstrap.phpを編集する必要があります。

 

Autoloader::add_classes(array(
    // ここにオーバーライドしたいクラスを追加します
    // Example: 'View' => APPPATH.'classes/view.php',
    'Validation' => APPPATH.'classes/validation.php',
));

Modelのコード使用例は以下の通りです。

	public static function validate($id=null)
	{
		
		$val = \Validation::forge();
		$val->add_field('group_code', 'グループコード', 'required|min_length[1]|max_length[4]')
			->add_rule('unique', self::$_table_name . '.group_code', $id);

		return $val;
	}

Controllerのコード例は以下の通りです。

■Insert例

	$val = Model_Group::validate();

■Update例

	$val = Model_Group::validate($post->id);

CodeIgniterからWordprssを呼び出した際に苦労したから、FuelPHPからはどうだろうと思いやってみた。
とりあえずということでまずは投稿された記事が呼び出せるか?(ってか、まだこれしかしてない)
まずは、フォルダの構成。あまり深く考えず、ドキュメントルートにwordpressを置いてみた。

ドキュメントルートの名前はwpplus(適当)

wp_1

 

この状態でwordpressのインストールを実行。

 

次に、 /fuel/app/bootstrap.php の編集を行う。
ポイントは3行目の「 require ‘../wordpress/wp-load.php’; 」の部分。
10行目の「require COREPATH.’classes’.DIRECTORY_SEPARATOR.’autoloader.php’; 」の部分より、
前に呼び出す必要がある。

<?php

require '../wordpress/wp-load.php';

// Load in the Autoloader
require COREPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php';
class_alias('Fuel\\Core\\Autoloader', 'Autoloader');

// Bootstrap the framework DO NOT edit this
require COREPATH.'bootstrap.php';
Autoloader::add_classes(array(
// Add classes you want to override here
// Example: 'View' => APPPATH.'classes/view.php',
));

// Register the autoloader
Autoloader::register();

/**
* Your environment. Can be set to any of the following:
*
* Fuel::DEVELOPMENT
* Fuel::TEST
* Fuel::STAGING
* Fuel::PRODUCTION
*/
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);

// Initialize the framework with the config file.
Fuel::init('config.php');

次に、Controllerの作成。
ポイントは9行目の「 require_once ‘../wordpress/wp-blog-header.php’; 」の部分。
後はWordpressの関数を呼び出すことで記事の一覧を取得出来る。


というわけで、非常に簡単でした。

Fuelphpでvalidation結果を日本語表示にする方法。

 

1. fuel/app/config/config.php を編集する。編集箇所は以下の通り。

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

 

 

以下、編集結果。

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

 

2. fual/app/lang フォルダ配下に ja という名前のフォルダを作成する。

3. 「2」にて作成したフォルダに validation.phpというファイルを作成する。

4. 「3」で作成した validation.phpを編集する。

以下、編集例。

<?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:1 で入力してください。',
);

以上の手順で validation結果が日本語表示されるようになる。

 

FuelPHPでindex.phpを含むURI(mod rewriteで省略しない)場合、

paginationのリンク生成が正常に動作しないことを確認しました。

 

■例

http://localhost/app/public/index.php/aaa/bbb/list

■コントローラ: bbb

■メソッド:list

■paginationのconfig

$pagination = Pagination::forge(‘default’, array(
‘pagination_url’ => ‘/app/public/index.php/aaa/bbb/list’,
‘uri_segment’ => 4,
‘total_items’ => $count,
‘per_page’ => $this->per_page,
‘));

この場合、paginationで生成されるURLは、以下のようになりました。

http://localhost/app/public/index.php/aaa/bbb/2
※本来であれば、http://localhost/app/public/index.php/aaa/bbb/list/2となるはず

上記の例をmod rewriteでindex.phpを省略させた場合、正常に動作し、以下のURLが生成されました。

http://localhost/app/public/aaa/bbb/list/2

 

paginationのコードを追ったところ、以下の部分を変更することで正常に処理されるようになりました。

■FuelPHP 1.6の場合

543行目
○修正前

$segs[$this->config['uri_segment'] - 1 + $seg_offset] = '{page}'; 

○修正後

$segs[$this->config['uri_segment'] + $seg_offset] = '{page}'; 

 

この事象は恐らくバグだと思われます。
これはあくまで暫定の対処方法です。

 

FuelPHP 1.6をxampp(windows環境)で利用する際、composerをインストールしないと使えなくなりました。

FuelPHPをxamppに設置(解凍)してアクセスすると、以下のエラーが表示されます。

Composer is not installed. Please run “php composer.phar update” in the root to install Composer

丁寧に対処するためのコマンドが表示されますが、このコマンドは旧バージョンがインストールされていて、

それをアップデートするためのコマンドになります。

composerがインストールされていない環境では、”update”ではなく、”install”する必要があります。

インストールするためのコマンドは以下の通りです。

php composer.phar install