目次 †
内容 †
参考情報 †
インストール方法 †
- 適当なディレクトリに解凍
- パスをphp.iniのinclude_pathに追加
コマンド †
ロギング †
設定手順 †
- Bootstrap.phpでログ出力オブジェクトを生成してレジストリに登録
protected function _initLogger(){
// ファイル名の生成
Zend_Date::setOptions( array( 'format_type' => 'php' ) );
$date = new Zend_Date();
// Zend_Logのオブジェクト生成・登録
$writer = new Zend_Log_Writer_Stream( "../app_logs/" . $date->toString('Y-m-d') . ".log" );
$logger = new Zend_Log( $writer );
Zend_Registry::set( 'logger', $logger );
}
利用方法 †
優先度 †
スタックトレースの出力 †
Validaterの翻訳 †
- 本来ならValidateインスタンスのsetMessages()メソッドで翻訳メッセージを指定する
- しかし、インスタンス生成時に毎回指定するのは面倒
- Zend_Translateを使う方法があるらしいが、その使い方が良く分からない
- なので、各バリデータを継承した独自クラスを作成し、そちらを利用する
- 下記はZend_Validate_EmailAddressを継承した「Zend_Validate_EmailAddressJa」の例
Zend_Validate_EmailAddressJaの準備 †
- library/Zend/Validate/EmailAddressJa.phpを作成
<?php
require_once 'Zend/Validate/EmailAddress.php';
class Zend_Validate_EmailAddressJa extends Zend_Validate_EmailAddress{
protected $_messageTemplates = array(
self::INVALID => "文字列以外のデータ型が入力されています",
self::INVALID_FORMAT => "「%value%」はメールアドレスの基本的な形式([email protected])ではありません",
self::INVALID_HOSTNAME => "メールアドレス「%value%」内の「%hostname%」は有効なホスト名ではありません",
self::INVALID_MX_RECORD => "メールアドレス「%value%」内の「%hostname%」は有効な MX レコードではないようです",
self::INVALID_SEGMENT => "'%hostname%'はパブリックなネットワークに存在するホストではありません",
self::DOT_ATOM => "メールアドレス「%value%」内の「%localPart%」はドットアトム形式に合いません",
self::QUOTED_STRING => "メールアドレス「%value%」内の「%localPart%」は引用文字列形式に合いません",
self::INVALID_LOCAL_PART => "メールアドレス「%value%」内の「%localPart%」は有効なローカルパートではありません",
self::LENGTH_EXCEEDED => "「%value%」は許容されている文字数を超えています",
);
}
Controllerでの使用 †
メール送信 †
参考 †
スクリプト例 †
- 日本語はめんどくさい
<?php
require_once( "Zend/Mail.php" );
$body = "送信する内容";
$from_address = "[email protected]";
$from_str = "送信者の名前";
$mailto = "[email protected]";
$subject = "メール題名";
mb_internal_encoding("JIS");
$mail = new Zend_Mail( "ISO-2022-JP" );
$mail->setBodyText( _to_jis( $body ), "ISO-2022-JP", Zend_Mime::ENCODING_7BIT );
$mail->setHeaderEncoding(Zend_Mime::ENCODING_BASE64);
$mail->setFrom( $from_address, mb_encode_mimeheader( _to_jis( $from_str ), "JIS", "B" ) );
$mail->addTo( $mailto );
$subject = preg_replace( '/\s+/', ' ', $subject );
$mail->setSubject( mb_encode_mimeheader( _to_jis( $subject ), "JIS", "B" ) );
$mail->addHeader('Content-Type', 'text/plain; charset=iso-2022-jp');
$mail->addHeader('Content-Transfer-Encoding', '7bit');
$mail->send();
function _to_jis( $str ){
return mb_convert_encoding( $str, "JIS", "ASCII,JIS,UTF-8,CP51932,SJIS-win" );
}
Zend_Db_Table †
モデル †
呼び出し側 †
- ZendFrameworkのコントローラじゃなくても利用可能
<?php
// zend library
require_once( "Zend/Db.php" );
// models
require_once( "models/tablename.php" );
// open DB
$db = Zend_Db::factory( 'PDO_MYSQL', array(
'host' => 'hostname',
'username' => 'username',
'password' => 'password',
'dbname' => 'schema',
) );
if( ! $db ){
die( "db error\n" );
}
$table = new Tablename( array('db' => $db) );
$rowset = $table ->find( array( 1, 2, 3 ) );
foreach ( $rowset as $row ){
print_r( $row->toArray() );
}
実行例 †
- 条件検索
$table = new Tablename();
$select = $table ->select()->where( 'field1= ?', "val1" );
$rows = $table->fetchAll($select);
- AND条件検索
$table = new Tablename();
$select = $table ->select()->where( 'field1= ?', "val1" )->where( 'field2= ?', "val2" );
$rows = $table->fetchAll($select);
- OR条件検索
$table = new Tablename();
$select = $table ->select()->where( 'field1= ?', "val1" )->orWhere( 'field2= ?', "val2" );
$rows = $table->fetchAll($select);
Zend_Log †
FireBugへの出力 †
メモ †
Viewヘルパーのformメソッドのクローズタグ(</form>) †
- formタグを出力するform()メソッドは、本来次のように動くはずだった。
form($name, $attribs, $content): XHTML の form を作成します。すべての $attribs はエスケープされ、form タグの XHTML 属性としてレンダリングされます。 $content が存在してその値が FALSE 以外の場合は、 その内容がフォームの開始タグと終了タグの間にレンダリングされます。 $content が FALSE (既定値) の場合は、 フォームの開始タグのみを作成します。
- しかし、3番目の引数を指定しない・もしくはfalseを指定しても</form>が出力されてしまう。
- Viewコード
<?php echo $this->form("name1", array( "action" => "next.php", "metiod" => "post" ), false ); ?>
- 結果
<form id="name1" action="next.php" metiod="post"></form>
- ZendFrameworkのバグレポートによると、1.11で改修されてしまったらしい。
viewヘルパーのformTextメソッドのタグの終了 †
- formTextメソッドの説明には、inputタグをXHTML形式(タグを閉じた形)で出力されると書いてある。
formText($name, $value, $attribs): <input type="text" /> 要素を作成します。
- しかし、結果をみると、タグは閉じられてない。
- PHPソース(view)
<?php echo $this->formText("zip1", null, array( "size" => 6 ) ); ?>-
- 結果
<input type="text" name="zip1" id="zip1" value="" size="6">
- いろいろ調べると、doctypeヘルパーでXHTMLを指定する必要があるらしい
ContextSwitch †
古い内容 †
動作検証方法 †
FrontControllerの設定 †
.htaccessの内容 †
php_flag magic_quotes_gpc off
RewriteEngine on
RewriteBase /newbaby
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
index.phpの内容 †
<?php
require_once 'Zend/Controller/Front.php';
$front = Zend_Controller_Front::getInstance();
$front->setParam( 'noViewRenderer', true );
$front->setControllerDirectory( '../application/controllers' );
$front->dispatch();
?>
Smartyの設定 †
簡単な方法 †
- Smarty_ViewというViewクラスを用意し、各コントローラはこのクラスのインスタンスを利用する
<?PHP
require_once 'Zend/View.php';
require_once 'Zend/Config/Ini.php';
require_once 'Smarty.class.php';
class Smarty_View extends Zend_View_Abstract{
private $_smarty;
public function __construct ( $config = array() ){
parent::__construct( $config );
// Smartyライブラリの読み込み
$this->_smarty = new Smarty;
$this->_smarty->template_dir = dirname( __FILE__ ) . "/templates";
$this->_smarty->compile_dir = dirname( __FILE__ ) . "/compiles";
}
public function display ( $tplFile ){
$this->_smarty->display( $tplFile );
}
public function setVal ( $name, $value ){
$this->_smarty->assign( $name, $value );
}
protected function _run(){
include func_get_arg(0);
}
}
?>
Zend_View_Smartyの実装 †
- Zend.comのマニュアルどおりではFrameworkのアップデートが難しいので却下
(というか、マニュアルを用意するくらいなら、標準で入れとけ!)
|