目次

内容

参考情報

インストール方法

  • 適当なディレクトリに解凍
  • パスをphp.iniのinclude_pathに追加

コマンド

  • プロジェクト作成
    # /path/to/zf/bin/zf.sh create project <プロジェクト名>
  • モジュールを作成
    # /path/to/zf/bin/zf.sh create module <モジュール名>

ロギング

設定手順

  • 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 );
    }

利用方法

  • 各コントローラでレジストリに登録してあるログ出力オブジェクトを呼び出す
    $logger = Zend_Registry::get('logger');
    $logger->info('雇用者登録');

優先度

  • 参考:組み込みの優先度の使用
    EMERG   = 0;  // 緊急事態 (Emergency): システムが使用不可能です
    ALERT   = 1;  // 警報 (Alert): 至急対応が必要です
    CRIT    = 2;  // 危機 (Critical): 危機的な状況です
    ERR     = 3;  // エラー (Error): エラーが発生しました
    WARN    = 4;  // 警告 (Warning): 警告が発生しました
    NOTICE  = 5;  // 注意 (Notice): 通常動作ですが、注意すべき状況です
    INFO    = 6;  // 情報 (Informational): 情報メッセージ
    DEBUG   = 7;  // デバッグ (Debug): デバッグメッセージ

スタックトレースの出力

  • 例外は、そのオブジェクトをロガーに渡すだけとのこと。※Zend Framework: Documentation: ライター - Zend Framework Manual

    Zend_Exception のログを記録するには、単にその例外オブジェクトをロガーに渡すだけです。 設定している優先度やスタイルにかかわらず、例外は自動的に例外と判断されます。

    $exception = new Zend_Exception('Test exception');
    $logger->err($exception);

Validaterの翻訳

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%」はメールアドレスの基本的な形式(local-part@hostname)ではありません",
            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での使用

  • 行頭に入れる
    Zend_Loader::loadClass('Zend_Validate_EmailAddressJa' );
  • あとは、適宜バリデータを呼び出すだけ
    $validater = new Zend_Validate_EmailAddressJa();

メール送信

参考

スクリプト例

  • 日本語はめんどくさい
    <?php
    
    require_once( "Zend/Mail.php" );
    
    $body = "送信する内容";
    $from_address = "from@abc.com";
    $from_str = "送信者の名前";
    $mailto = "to@abc.com";
    $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

モデル

  • テーブル名が「tablename」の場合、ファイルを"model/tablename.php"で保存
    <?php
    
    require_once( "Zend/Db/Table/Abstract.php" );
    
    class Tablename extends Zend_Db_Table_Abstract {
    
        protected $_name = "tablename";
        protected $_primary = 'id';
    
    }

呼び出し側

  • 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);
    • 見つからない場合は結果にnullが返る
  • 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);
  • キーフィールドによる検索
    $rows = $table->find(1234);
    $rows = $table->find(array(1234, 5678)); // 複数の指定

Zend_Log

FireBugへの出力

  • FireBugとFirePHPをFirefoxにインストールしておく
    // firebugに出力
    $writer = new Zend_Log_Writer_Firebug();  
    $logger = new Zend_Log($writer); 
    $logger->debug( $_SESSION );  

メモ

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を指定する必要があるらしい
  • 日本語訳では最後の説明に「もっともシンプルな使用法は、 レイアウトスクリプトの先頭で指定と出力を同時に行うことでしょう。」とあるが、bootstrup.phpに次を追加したほうが楽。
    protected function _initView(){
        // doctypeの指定
        $doctypeHelper = new Zend_View_Helper_Doctype();
        $doctypeHelper->doctype('XHTML1_STRICT');
    }

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の実装


添付ファイル: fileZend_View_Smarty.txt 614件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-25 (日) 19:27:03 (442d)