<PHP> 無名関数
PHPは5.3.0から無名関数が使えるようになった。
http://php.net/manual/ja/functions.anonymous.php
無名関数は、関数名を指定せずに関数を作成できるようにするもの。
コールバックに便利。
無名関数=クロージャではない。
<?php function something() { $fruit = array('apple', 'grape', 'orange'); $callback = function($favorite) { echo "I like {$favorite} !"; }; array_walk($fruit, $callback); } ?>
※無名関数の閉じ括弧「}」のあとには、セミコロン「;」をつける。
MAMPでCakePHPを使う。
mysqlのエラーが出る場合。
Warning Error: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in [/Applications/MAMP/htdocs/cakephp/lib/Cake/Model/Datasource/Database/Mysql.php, line 160]
app/Config/database.php
<?php public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'port' => '/Applications/MAMP/tmp/mysql/mysql.sock',// <--追記 'login' => 'root', 'password' => 'root', 'database' => 'dbName', 'prefix' => '', 'encoding' => 'utf8',// <--コメントインしておく ); ?>
タイムゾーンのエラーが出る場合
Warning: strtotime(): It is not safe to rely on the system's timezone settings. ………
app/Config/core.php
<?php //date_default_timezone_set('UTC'); date_default_timezone_set(‘Asia/Tokyo’); ?>
<CakePHP> パスワードをDBに保存する前にハッシュ化する
app/Model/User.php
<?php App::uses('AuthComponent', 'Controller/Component'); class User extends AppModel { public function beforeSave() { $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']); return true; } } ?>
<CakePHP> CakePHP 2 でメール送信
CakePHP2.0ではメール送信機能を実装する場合に2つの選択肢がある。
1. CakeEmailを使用
2. EmailComponentを使用
以下、CakeEmailを使う。
・メールレイアウト
/app/View/Layouts/Emails/text/mylayout.ctp
<?php echo $content_for_layout; ?>
の箇所にメール本文が入る。
・メールテンプレート
/app/View/Emails/text/mytemplate.ctp
変数は送信処理のviewVarsメソッドでセットする。
<?php echo $name; ?> 様 <?php echo $msg; ?>
・設定(Gmail)
/app/Config/email.php
<?php public $gmail = array( 'host' => 'ssl://smtp.gmail.com', 'port' => 465, 'from' => array('xxx.gmail.com' => 'Ackintosh'), 'sendAs' => 'text', 'replyTo' => 'xxx.gmail.com', 'returnPath' => 'xxx.gmail.com', 'username' => 'xxx.gmail.com', 'password' => 'password', ); ?>
・送信処理
Controller
<?php App::uses('CakeEmail', 'Network/Email'); $email = new CakeEmail('gmail');// /app/Config/email.phpで設定しておく $result = $email ->config(array('log' => 'emails')) ->viewVars($this->request->data['Member']) ->to(array('ooo@ooo.com' => 'new member')) ->subject('Sent from Ack.') ->send(); if (!$result) { echo 'Error : Email could not send.'; } ?>
/app/tmp/logs/emails.log にログを吐く。
$result には下記の連想配列が入るので、テストコードでこれを確認すれば良いと思われます。
Array ( [headers] => From: アドレスの別名 <from用のアドレス> X-Mailer: CakePHP Email Date: Sun, 06 Nov 201118:47:34 +0900 Message-ID: <4eb67ce538444757aa9e1eb7cbdd56cb@localhost:8081> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [message] => メッセージ )
テストは以下のテストファイルが参考になるそうです。
lib/Cake/Test/Case/Network/Email/CakeEmailTest.php
実際に送信できているかをMacで確認するには
/var/log/mail.log を見ます。
参考URL
http://d.hatena.ne.jp/lesamoureuses/20111106/1320584340 (テストについても書かれている)
http://www.b-prep.com/blog/?p=1293
http://rzpg.blogspot.jp/2011/12/cakephp20cakeemail.html
<CakePHP> 日付セレクトボックスを日本語にする
・デフォルト
echo $form->input('birthday');
・日本語に変更
echo $this->Form->input('birthday', array('dateFormat' => 'YMD', 'maxYear' => date('Y'), 'minYear' => date('Y')-100, 'monthNames' => false, 'label' => array('text' => '誕生日')));
<CakePHP> javascriptを読み込む
viewファイル
<?php echo $this->Html->script(array('jquery', 'util'), array('inline' => false)); ?>
/app/webroot/js/jquery.js
/app/webroot/js/util.js
が読み込まれる。
※inlineオプションをfalseにすることによってレイアウトファイル側でスクリプトファイルを読み込んでくれます。
layoutファイル
<head> ... <?php echo $this->fetch('script'); ?> </head>
PHPUnit使い方メモ
<?php require_once 'PHPUnit/Framework/TestCase.php'; require_once 'hello.php'; class HelloTest extends PHPUnit_Framework_TestCase { public function testHoge() { $hello = new Hello(); $this->assertEquals('hoge', $hello->hoge()); } } ?>