BEAR.Sundayでコンタクトフォームを作ってみる⑧

BEAR.Sundayでコンタクトフォームを作ってみる⑦の続きです。

コードの軽微な改良をします。

フォームの改良

入力項目はすべて必須なので、required属性を追加します。

--- a/src/Interceptor/Contact/Form.php
+++ b/src/Interceptor/Contact/Form.php
@@ -38,7 +38,8 @@ class Form implements MethodInterceptor
                     'id' => 'name',
                     'name' => 'name',
                     'size' => 20,
-                    'maxlength' => 50
+                    'maxlength' => 50,
+                    'required' => 'required'
                 ]
             );
         $filter->setRule(
@@ -60,6 +61,7 @@ class Form implements MethodInterceptor
                     'name' => 'email',
                     'size' => 20,
                     'maxlength' => 100,
+                    'required' => 'required'
                 ]
             );
         $filter->setRule(
@@ -80,6 +82,7 @@ class Form implements MethodInterceptor
                     'name' => 'comment',
                     'cols' => 40,
                     'rows' => 5,
+                    'required' => 'required'
                 ]
             );
         $filter->setRule(

Contact\Formリソースの改良

少々適切でない変数名を修正し、ハードコードされている管理者のアドレスをとりあえずプロパティに追い出します。

--- a/src/Resource/App/Contact/Form.php
+++ b/src/Resource/App/Contact/Form.php
@@ -17,14 +17,18 @@ use Ray\Di\Di\Inject;

 class Form extends ResourceObject
 {
-    private $mailer;
+    private $mailerFactory;
+
+    // Email account info to receive posted data
+    private $adminEmail = 'admin@example.org';
+    private $adminName = 'Administrator';

     /**
      * @Inject
      */
-    public function __construct(SwiftMailerFactory $mailer)
+    public function __construct(SwiftMailerFactory $mailerFactory)
     {
-        $this->mailer = $mailer;
+        $this->mailerFactory = $mailerFactory;
     }

     /**
@@ -58,10 +62,10 @@ class Form extends ResourceObject
             'comment' => $comment,
         ];

-        $mailer = $this->mailer->create();
-        $mailer->setSubject('コンタクトフォーム')
+        $mailer = $this->mailerFactory->create();
+        $mailer->setSubject('Contact Form')
             ->setFrom($data['email'], $data['name'])
-            ->setTo('admin@example.org', '管理者')
+            ->setTo($this->adminEmail, $this->adminName)
             ->setTemplate('mailer/contact_form.twig', $data);

 //        echo '<pre>'

ここまでのソースコード

GitHubで公開しました。

今日はここまでにします。

BEAR.Sundayでコンタクトフォームを作ってみる⑨へ続く。

過去記事

関連

Tags: bear

WindowsでFuelPHP 1.7.2のCoreのテストが失敗する

XAMPP for Windows 1.8.3-4では、FuelPHP 1.7.2のCoreのテストでエラーと失敗がありました。

FAILURES!
Tests: 375, Assertions: 410, Failures: 4, Errors: 36.

FuelPHP 1.7.1でも同じようにエラーと失敗していました。

FAILURES!
Tests: 361, Assertions: 376, Failures: 4, Errors: 36.

エラーが出たのは、Fuel\Core\Test_Agentクラス、失敗はFuel\Core\Test_Debug、Fuel\Core\Test_Fieldsetの2つのクラスです。

Agentクラスのエラーは、XAMPP for Windowsに含まれているbrowscapファイルが壊れていることが原因のようです。PHPのget_browser()関数が以下のエラーを出します。

get_browser(): Delimiter must not be alphanumeric or backslash

このbrowscapファイルを無効にするようにphp.iniを変更すれば解消しました。

@@ -1491,7 +1491,7 @@

 [browscap]
 ; http://php.net/browscap
-browscap="C:\xampp\php\extras\browscap.ini"
+;browscap="C:\xampp\php\extras\browscap.ini"

 [Session]
 ; Handler used to store/retrieve data.

Linux環境ではこの設定はnull(PHPのデフォルト)になっており、その場合、FuelPHPのAgentクラスが最新のbrowscapファイルをダウンロードして一定期間キャッシュします。上記の設定変更でWindows環境でも同じ動作になります。

残りの4つの失敗は、出力される結果の改行コードの違いによりテストが失敗するというもののようです。本家Issuesに投稿しました。

関連

Tags: fuelphp

Nagoya.php vol.6のまとめ

2014/8/17に開催されたNagoya.php vol.6に参加しました。

第21回オフラインリアルタイムどう書く「レッスンは何曜日?」

今回も以下の「オフラインリアルタイムどう書く」をやりました。

私は会場ではクラスをいくつか書いてテストを書きつつ、ちょっとずつ実装していたのですが、時間切れで肝心の処理アルゴリズムが完成しませんでした。

この「オフラインリアルタイムどう書く」は聞くところによると1時間で完成させるらしいので、クラス設計とかちまちまやっていると時間内に完成させるのは無理なことがわかりました。

ということで、家に帰って、ガーっと手続き型で書き直してみたのが以下のコードです。

他の参加者の解答例

LT

LTは3本ありましたが、スライドが公開されているのは以下の「WordPress.Skeleton」のみです。

WordPress.Skeleton

これは、WordPressのサイトで「自分のソース」のみをバージョン管理できるようにしたスケルトンです。WordPress本体やテーマのソースはComposer経由でインストールできるようにするものです。

CoderDojo Nagoya

あと、CoderDojo Nagoyaの紹介。CoderDojo名古屋は、名古屋で小学生以上の子ども達にプログラミングの楽しさを伝える道場です。

次回の予定

次回は11月に開催予定です。興味のある方は是非参加してみてください。

関連

Tags: php, nagoyaphp