【ThinkPHP】開発のいくつかの提案


バージョンの選択
現在3.1と3.2のバージョンに分かれているが、3.2に直接アップグレードすることはできない.3.2は5.3以上のバージョンに完全に基づいており、コードスタイルなどが変わっている.最大は「ネーミングスペース」の概念を応用している.私は以前C#開発をしていたので、私には少しもよく知られていません.そして、このようなアップグレードをサポートしていましたが、PHPのこのようなネーミングスペースはまだ順調ではありません.バージョンによってネーミングすると、過剰なバージョンになるはずです.次の調整を待ちましょう.
組み込みのページングは使用しないでください
TP内蔵のページングは使用しないことをお勧めします.内蔵のページングはHTMLも中に封入されています.HTMLテンプレートを勝手に修正することもできますが、このURLは意外にもつなぎ合わせられています.これは使用シーンを制限しています.実はモデルを利用したpageは簡単に自分でページングをパッケージすることができますが、私自身はページングをパッケージしていません.直接露出して1つのファイルを含んで、直接HTMLの中でページを組み立てて、とても柔軟です.
モデルインスタンスの場合はDメソッドを使用してください
公式にはMメソッドは高速で効率的だと言われていますが、Dメソッドはいくつかの高度な特性を使用することができます.例えば、modelで自分で定義したいくつかの面はDメソッドを通過してから呼び出さなければなりません.
モデルごとにクラスファイルを作成する
すなわち、テーブルごとにxxxModle.を作成する.class.php、これは面倒ですが、実際の過程で役に立ちます.私は個人的に公共のモデルファイルを作ることに慣れています.class.php、内蔵_list_getOneメソッドと、
<?php
class CommonModel extends Model {
    public function _list_($map = array() ,$page = 1,$limit = 16, $orderby = "id desc"){
        $list['count'] = $this->where($map)->count('id');
        $list['page'] = $page;
        $list['map'] = $map;
        $list['limit'] = $limit;
        $pagecount = ceil($list['count'] / $list['limit']);
        if ($pagecount < 1) $pagecount =1;
        $list['pagecount'] = $pagecount;
        $vlist = $this->where($map)->page($page,$limit)->order("$orderby ")->select();
        $vvlist = array();
        foreach ($vlist as $k) {
            if (method_exists($this, 'ckvo')) {
                $vvlist[] = $this->ckvo($k);
            }else{
                $vvlist[] = $k;
            }
        }
        $list['volist'] = $vvlist;
        return $list;
    }
    public function getOne($map='')
    {
        $vo = $this->where($map)->order('id desc')->find();
        if (method_exists($this, 'ckvo')) {
            $vo = $this->ckvo($vo);
        }
        return $vo;
    }
}
?>

Pageメソッドを使用し、ページングに必要なすべてのパラメータを返します.ここではTPの関連メソッドをできるだけ使用しないことをお勧めします.ここではckvoメソッドで代用します.
public function ckvo($vo='')
    {
    	if (!$vo) return;
    	$Comment = D('Comment');
    	$comment = $Comment->getAll($vo['id'],'Info');
    	if ($comment) {
            $vo['Comment'] = $comment;
        }
    	return $vo;
    }

このように何度も検索したが、TPの連合クエリーより性能が悪いわけではないが、実際には最終的にmysql解析の両者の原理は同じで、肝心なのはこのように私が任意に組み合わせてももっと方面に検索することができることだ.
public function ckvo($vo = '')
    {
    	if (!$vo) return;
    	$LotteryItem = M('LotteryItem');
    	$map['lid'] = $vo['id'];
    	$vlist = $LotteryItem->where($map)->select();
    	for ($i=0; $i < 6; $i++) { 
    		$vo['Item'][$i] = $vlist[$i];
    	}
        if ($vo['status'] == 0) 
            $vo['status_text'] = "   ";
        elseif ($vo['status'] == 1) 
            $vo['status_text'] = "   ";
        elseif ($vo['status'] == 2) 
            $vo['status_text'] = "   ";
        elseif ($vo['status'] == 3) 
            $vo['status_text'] = "    ";
    	return $vo;
    }

バックグラウンドでは通常URLモードをご利用ください
バックグラウンドに他の必要がない場合は、プラットフォームURLモードを使用してURL_を設定します.MODEL=0は、一般的にURLの最適化をしたほうが便利な収録ですが、バックグラウンドは収録されたくないでしょう.これはまだ最も主要なものではありません.カスタムモードのURL(非プラットフォームモード)は、フロントエンドの開発に合わせて大きな悩みを抱えています.例えば、暗記時にjqがURL解析を必要とすると判断しにくくなります.また、cookiesを設定する際にも経路の問題があることに気づきました(内蔵のcookieは使いにくいです)とにかく普通のURLモードをできるだけ使うようにしました.