Fuelphp:FuelPHP1.6のインストール

FuelPHP1.6インストールした時のメモです。
(手動でインストール)

FuelPHP1.6よりも前のバージョンと同じようにインストールしたところ、下記のメッセージが表示されました。

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

FuelPHP1.6からはComposerインストールしないと動かないそうです。

SSHでサーバにログインし、FuelPHPをインストールしたディレクトリに移動します。
composer.pharを置いているディレクトリで下記を実行します。

php composer.phar update

実行後、ディレクトリのパーミッションを書き込み可能にするために下記を実行します。

php oil refine install

サイトにアクセスすると、FuelPHP1.6のWelcomeページが表示されます。
インストールが無事完了しました。

fuelphp_install

インストール方法はドキュメントに書いてあるのでしっかり確認しなきゃダメですね。

インストール方法 – インストール – FuelPHP ドキュメント


Fuelphp:Uriクラスを使用し、URLのセグメントを取得

FuelphpURLセグメントを利用し、処理を変更したり判断させたりすることをすることが多くあります。
Uriクラスを使用すれば簡単にURLセグメントを取得することが可能です。

今回はFuelphpUriクラスを使用して、URLセグメント情報を取得する方法をメモします。


segment()

引数で指定した番号のセグメントを取得します。
セグメントがない場合はfalseを返します。

Uri::segment(セグメント番号, デフォルト値);

使用方法

「http://www.example.com/test/hoge/」でアクセスした場合

$str = Uri::segment(2);
var_dump($str);

2つ目のセグメントを取得することができます。

string(4) "hoge"

segments()

URLの全てのセグメントを配列で取得します。

Uri::segments();

使用方法

「http://www.example.com/test/hoge/」でアクセスした場合

$arr = Uri::segments();
var_dump($arr);

セグメントを配列で取得することができます。

array(2) { [0]=> string(4) "test" [1]=> string(4) "hoge" }

「/fuel/app/config/routes.php」で「(:num)」や「(:any)」などで指定した場合、セグメントの情報によってデータを取得したり、処理を変更したりなど色々な使い方ができると思います。

Fuelphp:DBクラスを使用したデータ取得

fuelphpDBクラスを使用し、データベースのデータを取得する方法をメモします。
データを取得する際はselect()メソッドを使用するとテーブル名やフィールド名などを
記述するだけで簡単に値を取得することができます。

また、直接SQL文を記述したい場合はquery()メソッドを使用しデータを取得します。
下記にselect()メソッドquery()メソッドの使用例を記載します。


select()メソッド

select()メソッドは、新しいDatabase_Query_Builder_Selectオブジェクトを返します。
select()メソッドを使用した場合は、自動的にエスケープされるのでSQLインジェクション対策が施されます。

・使用例


$query = \DB::select('id')->from('hoge_table');
$query->where('status', 1);
$res = $query->execute()->as_array();

query()メソッド

query()メソッドは、新しいDatabase_Queryオブジェクトを返します。
query()メソッドを使用する場合は、直接SQL文を記載します。

・使用例(SQL文の直接記述)


$sql = "SELECT id FROM hoge_table WHERE status = 1";
$query = \DB::query($sql);
$res = $query->execute()->as_array();

複雑なSQL文などを書く場合などに便利です。
しかし、エスケープ処理がされないので注意が必要です。

Fuelphp:Fuelphpで基本的なメール送信処理

FuelphpEmailパッケージを使用し、メール送信をした際の処理をメモします。
システムを作成しているとメール送信処理は頻繁に使用することがあると思います。
FuelphpのEmailクラスを使用することで簡単にメール送信をすることが可能です。


FuelphpでEmailクラスを使用したメール送信

Emailパッケージのロード

Emailクラスを利用可能にするには、Emailパッケージを読込んで使用できる状態にします。
「/fuel/app/config/config.php」の下記の箇所に「email」を追加し、Emailパッケージ読込みます。
※Emailパッケージをオートロードする場合


	'always_load'  => array(
		'packages'  => array(
			// Emailパッケージをオートロード
			'email',
		),

		(省略)
	),

また、Emailクラスを使用する時のみ起動させてい場合は
下記のようにコントローラー側で読込みます。


\Package::load('email');

Emailクラスの設定ファイル

Emailクラスの設定ファイルを編集します。

「/fuel/packages/email/config/email.php」をコピーし、
「/fuel/app/config/email.php」に新規で作成します。

文字化け対策をするため、コピーして新規に作成したファイルを
下記のように編集します。


	'setups' => array(
		'default' => array(),
		'jis' => array(
			'charset' => 'ISO-2022-JP',
			'encoding' => '7bit',
		)
	),

メール送信処理

メール送信をするにはEmail::forge()でインスタンスを生成します。
今回はEmail::forge(‘jis’)で設定ファイルで設定した内容を読込んでいます。

ファイルを使用しない場合


	$email = \Email::forge('jis');
	$email->from('送信元アドレス', '送信者名');
	$email->to('送信先アドレス');
	$email->subject('件名');
	$body = '本文';
	$email->body(mb_convert_encoding($body, 'jis'));

	try {
		$email->send();
	}
	catch (\EmailValidationFailedException $e) {
		$err_msg = '送信に失敗しました。';
	}
	catch (\EmailSendingFailedException $e) {
		$err_msg = '送信に失敗しました。';
	}

ファイルを使用する場合

「/fuel/app/views/email/sample.php」に
メール本文の内容を記載しています。


	$email = \Email::forge('jis');
	$email->from('送信元アドレス', '送信者名');
	$email->to('送信先アドレス');
	$email->subject('件名');
	$body = \View::forge('email/sample', $data);
	$email->body(mb_convert_encoding($body, 'jis'));

	try {
		$email->send();
	}
	catch (\EmailValidationFailedException $e) {
		$err_msg = '送信に失敗しました。';
	}
	catch (\EmailSendingFailedException $e) {
		$err_msg = '送信に失敗しました。';
	}

Fuelphp:コントローラーから渡したHTMLソースをビューで出力する

fuelphpでコントローラーからHTMLソースをビューに渡して出力したい場合があります。

fuelphpではコントローラーからビューに渡す値をデフォルトでエスケープするようになっており、
セキュリティを高めるためにXSS(クロスサイトスクリプティング)対策が実施されています。

処理の内容によっては、HTMLソースをビューで出力したい場合があるので、
下記にコントローラーから渡したHTMLソースなどの値を、
エスケープせずにビューで出力する方法を記載します。


エスケープしない値をビューに渡す

Viewクラス forge()メソッドの第三引数に「false」を設定します。

コントローラー

$this->template->content = \View::forge('hoge/index', $data, false);

$dataの値がエスケープしないでビューに渡されます。


変数を指定してエスケープしない値をビューに渡す

エスケープしない変数を指定してビューに値を渡す場合、
set_safe()メソッドを使用し値を設定します。
※$data[‘hoge_html’]の値をエスケープなしで設定した場合

コントローラー

$this->template->content = \View::forge('hoge/index', $data);
$this->template->content->set_safe('hoge_html', $data['hoge_html']);

ビュー

<?php echo $hoge_html; ?>

上記は$data[‘hoge_html’]をエスケープしないで、
ビューで$hoge_htmlという変数で使用できます。


ビューに渡す全ての値をエスケープなしで渡すよりは、
set_safe()メソッドでエスケープしない値のみを指定した方が、
エスケープしない値がわかりやすいのでおすすめです。