kohanaのテスト7・・・Zend Frameworkでkohanaの機能を拡張する
kohana はシンプルなだけに、アプリケーションに近い部分の機能は貧弱です。今日は高名な Zend Framework を kohana と合体させて Zend Mail を使ってみます。オートローディング機能を持つ CMS なら何でも合体して機能拡張できるみたいです。
準備作業
・Zend のサイトから Zend Framework Minimal Package をダウンロードして解凍します。ダウンロードするにはユーザー登録する必要があります。
・ライブラリの詳細は Zend のリファレンスガイドを参考にしてください。
・解凍した library/Zend を kohana/application/vendor/Zend に配置します。
・kohana/application/bootstrap.php の最後に以下を追加します。
/** * Enable Zend Framework autoloading * Zend_Mail setting */ if ($path = Kohana::find_file('vendor', 'Zend/Loader')) { ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.dirname(dirname($path))); require_once 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::getInstance(); }
コントローラ
・kohana/application/classes/controller/test7.php
<?php defined('SYSPATH') OR die('No direct access allowed.'); class Controller_Test7 extends Controller { public function action_index() { $user = '日本一太郎'; $to = 'ichitaro.nippon@world.com'; $conf = Kohana::$config->load('test7')->mail1; foreach ($conf as $key => $value) { $$key = $value; } $date = Date::formatted_time(); $link = 'http://kohna.site/kohana/?auth_key=abcdefg'; $body = <<< EOT $user 様 $body1 $link $body2 $date EOT; $Z_Mail = new Zend_Mail('localhost'); $Z_Mail ->setBodyText($body) ->setFrom($from) ->addTo($to) ->setSubject($subject) ->send(); $view = new View('test2'); $view->content = "メールの送信テストです"; $view->message = "メールを送信しました"; $this->response->body($view); } } ?>
<説明>
・$to には自分のメールアドレスを書いて下さい。
・コンフィグファイルをロードしてプロパティ mail1 を配列として取り出しています。
・$$key = $value; の所で 連想配列のキーを名前とする変数を生成しています。以前からこの $$ を使ってみたかったんです・・・(^^;;;
・タイムスタンプには kohana Date を利用しています。
・Zend_Mail のインスタンスを作って、各メソッドを利用してメールを送ります。
・xampp に付属の Mercury メールサーバーが稼働している前提です。設定方法は4月3日の日記を参照して下さい。
・ビューにはテスト2のものを流用しています。
コンフィグレーション
・kohana/application/config/test7
<?php defined('SYSPATH') or die('No direct access allowed.'); $body1 = <<< EOT ooサイトへようこそ! ユーザー登録を完了するには下記のリンクをクリックして登録ページにお越しください。 EOT; $body2 = <<< EOT ooサイトをよろしくお願いします。 ウエッブマスター 日本太郎 EOT; return array ( 'mail1' => array ( 'from' => 'webmaster@gmail.com', 'subject' => 'ユーザー登録のご案内', 'body1' => $body1, 'body2' => $body2, ), );
どうでしょう、メールは届きましたでしょうか?