今まで mojavi 、 symfony と php のフレームワークを使ってきたわけだけど、今回 Zend Frameworkを使ってみて明らかに一番使い易かった(入りやすかった)ので、ちょっとそれについてまとめておこうかなと。
# Cake はソースコードを見た時点で使う気うせた。。
まあ zend がやってるってことで、少くてもやっておいて損は無いかと。とりあえず QuickForm と Smarty は手放せないので、その当たりを交えてうまいこと C-MVC を構築する方法のメモ。
環境
CentOS-5
php-5.1.6
Zend Framework-1.0.1
QuickForm2-1.4
Smarty-2.6.18
$myarr = array(1, 2, 3); $smarty->assign("myarr", $myarr);と php 側でやった場合、
{$myarr|@count}で取得できる。
HTML_QuickForm_Rule クラスを継承したクラスを定義し、その validate 関数を加工してやればできます。
よく使う年月日を別々のテキストボックスで入力させてチェックさせたい場合などを例にします。
class IsDateExist extends HTML_QuickForm_Rule { function validate($value) { for ($i = 0; $i <= 2; $i++) { if (! ereg ("^[0-9]+$", $value[$i])) { return false; } } return ( checkdate($value[1], $value[2], $value[0]) ); } }
|cat: を使ってやります。
例えば $str1 と $str2 をくっつけて間に "_" をいれて $str3 を連結したい場合を例にすると。
value = {$str1|cat:$str2|cat:"_"|cat:$str3}
このブログを作成している際に、特定の記事だけ簡単な認証を行いたかったので、 PHP で BASIC 認証 っぽいことをやってみた。
実装は簡単で、ユーザが BASIC 認証を行った場合 PHP_AUTH_USER と PHP_AUTH_PW 環境変数にその際のユーザ名とパスワードが復号化されて格納される。
これを PHP で認証して、違ったら 401 エラーを返せばいいだけ。
$signin = false; if (isset ($_SERVER['PHP_AUTH_USER']) && isset ($_SERVER['PHP_AUTH_PW'])) { if ($_SERVER['PHP_AUTH_USER'] == 'masaki' && $_SERVER['PHP_AUTH_PW'] == 'password') { $signin = true; } } if (! $signin) { header('WWW-Authenticate: Basic realm="Enjoi Blog"'); header('HTTP/1.0 401 Unauthorized'); print "Error 401"; exit; }
例えば www.enjoitech.jp と blog.enjoitech.jp でセッションを共有したい場合は、 php のコードの session_start () 関数の前に、 session_set_cookie_params() でクッキーの影響範囲を enjoitech.jp にしてやることができる。
session_set_cookie_params (0 , '/', 'enjoitech.jp');もしくは php.ini で
session.cookie_domain "enjoitech.jp"でも可能。
Smarty で年月日を表示するドロップダウンを作るには html_select_date というカスタム関数が便利。
これを使うといちいち select だ option だ、何日前を表示だ、とか考えなくてする。実際のコードはこんな感じ。
{html_select_date year_empty="-" month_empty="-" \ day_empty="-" prefix="start" start_year="-4" time=$start_time}
こうすると、ドロップダウンのトップ項目に - を含んだ 4 年前からのドロップダウンが生成され $start_time がデフォルト値になる。
prefix は name に start を付加させて startYear, startMonth とかなるような感じ。詳細は Smarty Documentation参照。
通常 PHP は Apache にモジュールとして取り込まれている。
これを cgi として動かしたいときには apache の設定ファイルに変更を加える必要がある。
PHP を cgi として動作させると、 suExec も有効にさせることができる。
ただしデメリットもあり、動作が若干遅くなる。
環境は以下のとおり。
CentOS-4.4
PHP-5.1.6