FuelPHPのFieldsetでEメール送信

FuelPHPのコアクラスの概要』では、使い方も分からないまま、フィールドセットクラスのメソッドを調べてみましたが、今回は実際にフィールドセットを使ってメールを送信するプログラムを作成してみたいと思います。

1) 新たにsample4コントローラを作成し、下記のように記述します。

fuel/app/classes/controller/sample4.php

class Controller_Sample4 extends Controller
{
 public function action_index()
 {
 //フィールドセットのインスタンス化
 $form=Fieldset::forge();
 //属性値の登録
 $textarea=array('type'=>'textarea','cols'=>40,'rows'=>5);
 $submit=array('type'=>'submit', 'value' => '送信');
 //新しいフィールドの作成
 $form->add('to','宛先')
 ->add_rule('valid_mail')
 ->add_rule('required');
 $form->add('from','送信元')
 ->add_rule('valid_mail')
 ->add_rule('required');
 $form->add('subject','件名');
 $form->add('body','内容',$textarea)
 ->add_rule('required');
 $form->add('submit','',$submit);
 //入力値の保持
 $form->repopulate();
 $view=View::forge('sample4/test1');
 $view->set_safe('mail_form',$form);
 return $view;
 }
}

2) ビューファイルを作成します。

fuel/app/views/sample4/test1.php

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>メール送信</title>
</head>
<body>
<?php echo $mail_form;?>
</body>
</html>

3) ブラウザで確認してみます。必須項目の表題には、※印が付与されています。

4) 値を入力しないで送信ボタンを押してみます。必須項目を表す文字が表示されます。

エラーメッセージの日本語化

5) 必須項目のエラーメッセージは自動的に表示されるのですが、必須項目以外は自動的に表示されることはありません。エラーメッセージの表示設定をしなければなりませんが、初期状態では、英語表示なので、日本語で表示するように設定したいと思います。

6) まず、fuel/app/langフォルダに新しくjaフォルダを作成します。そのフォルダ内に、fuel/core/lang/enフォルダ内の、validation.phpファイルをコピーして貼り付けます。

7) コピーしてきたファイルを見てみます。

fuel/app/lang/ja/validation.php

<?php
 return array(
 'required' => 'The field :label is required and must contain a value.',
 'min_length' => 'The field :label has to contain at least :param:1 characters.',
 'max_length' => 'The field :label may not contain more than :param:1 characters.',
 'exact_length' => 'The field :label must containly exactly :param:1 characters.',
 'match_value' => 'The field :label must contain the value :param:1.',
 'match_pattern' => 'The field :label must match the pattern :param:1.',
 'match_field' => 'The field :label must match the field :param:1.',
 'valid_email' => 'The field :label must contain a valid email address.',
 'valid_emails' => 'The field :label must must contain a list of valid email addresses.',
 'valid_url' => 'The field :label must contain a valid URL.',
 'valid_ip' => 'The field :label must contain a valid IP address.',
 'numeric_min' => 'The minimum numeric value of :label must be :param:1',
 'numeric_max' => 'The maximum numeric value of :label must be :param:1',
 'valid_string' => 'The valid string rule :rule failed for field :label',
 );

8) 中身を日本語に修正するのですが、『:field』にはフィールド名、『:label』には、フィールドのラベル名が表示されます。『:param:1』には、『パラ-メータ1の値』、つまり、バリデーションの指定値が表示されます。『:value』には、入力値が表示されます。

9) min_lengthを下記のように変更してみます。

‘min_length’=>’『:label』の入力値『:value』は、『:param:1』文字以上の必要があります。’

10) 試しに、->add_rule(‘min_leingth’,3)とバリデーションの設定をしてみます。下記のように表示されました。

11) validation.phpファイルを各自で好きなように修正して下さい。私の場合、下記のように修正しました。

fuel/app/lang/ja/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:1』パターンと一致していません',
 '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』は検証文字ルールの『:rule』に適合していません',
 );

12) 検証(バリデーション)がOKなら、メールを送信して、検証NGならバリーデーションエラーを表示するように変更したいと思います。sample4.phpを下記のように修正します。

fuel/app/classes/controller/sample4.php

<?php
 class Controller_Sample4 extends Controller
 {
 public function action_index()
 {
 //フィールドセットのインスタンス化
 $form=Fieldset::forge();
 //属性値の登録
 $textarea=array('type'=>'textarea','cols'=>40,'rows'=>5);
 $submit=array('type'=>'submit', 'value' => '送信');
 //新しいフィールドの作成
 $form->add('to','宛先')
 ->add_rule('valid_email')
 ->add_rule('required');
 $form->add('from','送信元')
 ->add_rule('valid_email')
 ->add_rule('required');
 $form->add('subject','件名');
 $form->add('body','内容',$textarea)
 ->add_rule('required');
 $form->add('submit','',$submit);
 //入力値の保持
 $form->repopulate();
 //ビューオブジェクトの作成
 $view=View::forge('sample4/test1');
 $view->set_safe('mail_form',$form);
 //バリデーションオブジェクトの取得
 $val=$form->validation();
 //バリデーションの実行
 //検証OKの場合
 if($val->run())
 {
 //POSTデータを受け取る
 $to=Input::post('to');
 $from=Input::post('from');
 $subject=Input::post('subject');
 $body=Input::post('body');
 //メールオブジェクトの作成
 $email=Email::forge();
 //メール情報の設定
 $email->to($to);
 $email->from($from);
 $email->subject($subject);
 $email->body($body);
//メール送信
 $email->send();
 //メール送信後のビュー表示
 return Response::forge(View::forge('sample4/test2'));
 //検証NGの場合
 }else{
 //バリデーションエラーの取得
 $errors=$val->error();
 $view->set('errors',$errors);
 return $view;
 }
 }
 }

13) ビューファイルtest1.phpを下記のように修正します。

fuel/app/views/sample4/test1.php

<!DOCTYPE HTML>
 <html>
 <head>
 <meta charset="utf-8">
 <title>メール送信</title>
 </head>
 <body>
 <?php echo $mail_form;?>
 <?php foreach($errors as $val):?>
 <?php echo $val.'<br>';?>
 <?php endforeach;?>
 </body>
 </html>

14) 一応メール送信後のビューファイルも作成しておきます。

fuel/app/views/sample4/test2.php

<!DOCTYPE HTML>
 <html>
 <head>
 <meta charset="utf-8">
 <title>メール送信済み</title>
 </head>
 <body>
 メールを送信しました。
 </body>
 </html>

15) 間違ったメールアドレスで入力して、ブラウザで確認してみます。エラーメッセージが表示されました。

16) 入力値が正しければ(バリデーションOKなら)、メールが送信されます。

Fieldsetクラスの基本的な使い方

17) Fieldsetは、Fieldset::forgeかFieldset::instanceでフィールドセットのオブジェクトを作成し、その中に、addメソッドで、フィールドを追加していくことで、自動的にフォームが作成されます。そのフィールドの中にadd_ruleメソッドを繋ぐことで、バリデーションルールを設定することが出来ます。

18) repopulateは前回の入力値を保持しますので、再入力の手間が省けます。

19) set_safeでビューにデータを渡すことで、HTMLフォームのまま渡すことが出来ます。

20) $view->set(‘mail_form’,$form);でビューにファイルを渡すとエスケープ処理されますので、下記のようになります。

21) 以前、『fuelPHPで簡単Email送信』で作成したプログラムをフィールドセットを使って、作成してみました。これで少しフィールドセットの使い方が分かりかけてきました。

本日は以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

トラックバック

  1. […] – くじらぶろぐD ≫FuelPHPのFieldsetでEメール送信 | WinRoad徒然草 ≫EMXAS IT工房 ? […]

コメント

  1. 通りすがり より:

    記事タイトルですが、「Fildset」ではなく「Fieldset」ですね。

  2. 堀井 剛 より:

    関係資料が少ない中、とても参考にさせていただいています。
    ありがとうございます。

    気付いた点をお知らせします。
    1.最初の sample4.php のソースで誤植があります。
      forege() -> forge()
    2.「FuelPHPのビュー」にも同様の誤植があります。 

    重箱の隅をつつくような内容で恐縮ですが、
    いっそうみなさんの役にたっていただけますよう
    あえてコメントいたしました。
    今後ともよろしくお願いします。

    • nakada より:

      堀井 剛 様
      ご指摘ありがとうございます。
      早速修正しておきました。
      学生時代に英語は一生懸命勉強しておくべきでしたね。(^0^)
      単純な単語の打ち込みミスでプログラムが動かず、あたふたすることも多いです。
      めげずに頑張りますので、今後とも宜しくお願いいたします。


コメントをどうぞ

このページの先頭へ