ThinkPHP5の使用履歴

1.ドロップダウンボックスでプラグインを検索し、コンテンツを非同期で更新します

  • tp5テンプレートを使用する場合、組み込みのchosened.jquery.jsプラグインを使用すると、ドロップダウンボックスで検索機能を使用できます。
    ただし、Ajaxを使用して選択を非同期に更新すると、選択の内容が変更され、選択したプラグインによって生成されたドロップダウンボックス要素の内容は変更されません。個別に処理する必要があります。コードは次のとおりです。フォローする

    <label class="col-sm-3 control-label">用户类型:</label>
     <div class="input-group col-sm-4">
         <select class="form-control m-b " name="type" id="type">
             <option value="1">普通用户</option>
         </select>
     </div>

     <label class="col-sm-3 control-label">所属公司:</label>
     <div class="input-group col-sm-4">
         <select class="form-control m-b" name="company_id" id="company_id">
             <option value="0">公司列表</option>
         </select>
     </div>
<script>
	$('#type').change(function(){
     
     
        var type = $(this).val();
        $.get('/companys/type/'+ type,function(data){
     
     
            $('#company_id').html(data);//ajax获取公司的option字符串并更新
            $("#company_id").trigger("chosen:updated");//更新chosen生成的元素
        },)
    });
</script>

2.モデルの使用に関する問題

①ユニオンテーブルクエリ

モデルを使用してテーブルをクエリする場合、使用するすべてのフィルター条件とクエリするフィールドを、フィールドの前にテーブル名(またはエイリアス)とともに追加する必要があります。そうしないと、後でさまざまな例外が表示されます。

②モデルの再利用

複数の操作に同じモデルを使用する必要がある場合、モデルがselect()操作を実行すると、モデルがクリアされる前にwhereやjoinが読み込まれるなどのクエリ条件がクリアされ、モデルがselect()に使用されます。操作、以前にロードされた条件は実行されません。selecクエリを使用する必要がある複数の操作が発生した場合は、選択する前に使用できます。クローン 操作selectを実行するための新しいモデルオブジェクトのクローンを作成します。

3. Db :: name()では、グループグループ化を使用した後、count()を使用して後でクエリを集約することはできません。

4.間違ったリクエストアドレスの例外処理

  • 1.不正な操作要求

コントローラに存在しないメソッドをリクエストすると、次のエラーが報告されます。
ここに画像の説明を挿入
この場合、TPにはそれを処理するための特定のメソッドがあります。コントローラで_emptyという名前のメソッドを定義するだけで済みます。存在しない場合は、自動的に_emptyメソッドを呼び出します。

  • 2.不正なコントローラー要求

要求されたコントローラーが存在しない場合、次のエラーが報告されます
ここに画像の説明を挿入
。TPは、この状況の解決策も提供します。デフォルト設定では、以下の設定があります。
ここに画像の説明を挿入
対応するモジュールの下にエラーコントローラクラスが実装され、インデックスメソッドが確立されている限り、存在しないコントローラが要求されると、エラーの下のインデックスメソッドが自動的に実行されます。と呼ばれる

  • 3.不正なモジュールリクエスト

要求されたモジュールが存在しない場合、以下のエラーが報告されます。
ここに画像の説明を挿入
この状況に対応して、TPは具体的に解決策を設定していません。ただし、上記の2つの状況に応じて、App.phpファイルを変更できます。次の
ここに画像の説明を挿入
ボックスのコードは私が新しく追加したものです。つまり、モジュールが存在しない場合は、モジュールをカスタマイズして、プログラムをこのモジュールに移動させます。対応するコントローラーとメソッドの名前を検索します。ここで、カスタムモジュール名は使用しないでください。エラー、不可解な問題が発生します
。APP.phpファイルを変更した後、次のようにアプリケーションに移動して新しいモジュールとコントローラーを作成します。
ここに画像の説明を挿入

5.APIインターフェースはステータスを返します

  • tpを使用してインターフェースを作成する場合、予想される状況のステータスコードと情報を指定できますが、プログラムの異常である場合があり、すべての判断を下すことができません。システムに組み込まれているエラー処理メカニズムを使用して、システムキャッチ例外をインターフェイスと同じ形式で返すことができます。変更thinkphp / library / think / exception / Handle.php次のようにファイルします
    ここに画像の説明を挿入

6.配列条件の場所のマルチ条件クエリ

  • 通常、次の形式を使用します。$ where = ['id' => 1、 'status' => 2] この種の配列は条件として使用され、クエリ条件としてwhere($ where)に配置されます。これは拡張に便利です。複数条件のクエリメソッドで一般的に使用されるいくつかのメソッドを要約します。
//in条件
$where['id'] = ['in',[1,3,4,5]];
//范围查询
$where['id'] = ['between',[11,22]];
//时间范围查询,当字段类型为date,不能无法使用常规的范围查询
$where['date'] = [
	['>=','2020-0505'],
	['<=','2020-05-30'],
	'and'
];

7.コントローラーはバインディングパラメーターを取得します

例:public function index($ page){}
は、getまたはpostによって渡されたpageという名前のパラメーターを自動的に取得できます。
このように書いたときは、URLを介して渡されるパラメーターしか取得できないといつも思っていました

8.クエリを制限する

Db :: name( 'table')->limit(5,10)-> select();

Db :: name( 'table')->limit( '5,10')-> select();
効果は同じで、位置5から開始して10個のデータを取得します

9.PHPexcelのインポートとエクスポート

インポート

			//获取上传表单选中的文件信息
			$file = request()->file('file');
        	$info =$file->getInfo();
        	if(!is_file($info['tmp_name']))	return '文件不存在';
			//开始上传
            \think\Loader::import('.PHPExcel.PHPExcel.IOFactory');
            $objReader =  new \PHPExcel_Reader_Excel2007();
            if( ! $objReader->canRead($file)) {
    
    
                $objReader = new \PHPExcel_Reader_Excel5();
                if(!$objReader->canRead($file)) {
    
    
                    return json(['code' => 0, 'data' => '', 'msg' => '仅支持 .xls 类型的文件']);
                }
            }
            $objPHPExcel = $objReader->load($file,$encode='utf-8');//加载文件
			
            $sheet = $objPHPExcel->getSheet(1);//取得sheet表
			$objPHPExcel->setActiveSheetIndex(1);
            $highestRow = $sheet->getHighestRow(); // 取得总行数
			
			//echo $highestRow;exit;
            $aa=[];
			$salary_arr = Db::name('un_major_salary')->order('salary asc')->column('code');
            for($i=3;$i<=$highestRow;$i++)
            {
    
    
				$data=[];
                $data['is_red'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue()??0;
				$data['is_yellow'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue()??0;
                $data['is_green'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue()??0;
				
				Db::name('university_major')->where('major_code',$code)->update($data);
            }

書き出す

            $data = collection($company->select())->toArray();

            \think\Loader::import('.PHPExcel.PHPExcel.IOFactory');
            $obj =  new \PHPExcel();
            $fileName = $title;
            $fileType = "xlsx";
            // 设置当前sheet
            $obj->setActiveSheetIndex(0);
            // 设置当前sheet的名称
            $obj->getActiveSheet()->setTitle('list');
            // 列标
            $list = ['A', 'B', 'C','D','E'];
            // 填充第一行数据
            $title_E = $type == 1 || $type == 2?'最后清洗时间':'最后检测时间';
            $obj->getActiveSheet()
                ->setCellValue($list[0] . '1', '商户名称')
                ->setCellValue($list[1] . '1', '联系人')
                ->setCellValue($list[2] . '1', '联系电话')
                ->setCellValue($list[3] . '1', '地址')
                ->setCellValue($list[4] . '1', $title_E);

            foreach($data as $i=>$v){
    
    
                $obj->getActiveSheet()->setCellValue($list[0] . ($i + 2), $v['name']);//将其设置为文本格式
                $obj->getActiveSheet()->setCellValue($list[1] . ($i + 2), $v['contacts']);
                $obj->getActiveSheet()->setCellValue($list[2] . ($i + 2), $v['phone'], \PHPExcel_Cell_DataType::TYPE_STRING);
                $obj->getActiveSheet()->setCellValue($list[3] . ($i + 2), $v['base_address'].$v['address']);
                $obj->getActiveSheet()->setCellValue($list[4] . ($i + 2), $v['last_date']);
            }
            // 设置列宽
            $obj->getActiveSheet()->getColumnDimension('A')->setWidth(20);
            $obj->getActiveSheet()->getColumnDimension('B')->setWidth(20);
            $obj->getActiveSheet()->getColumnDimension('C')->setWidth(20);
            $obj->getActiveSheet()->getColumnDimension('D')->setWidth(80);
            $obj->getActiveSheet()->getColumnDimension('E')->setWidth(20);

            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="' . $fileName . '.xlsx');
            header('Cache-Control: max-age=1');
            $objWriter = \IOFactory::createWriter($obj, 'Excel2007');
            //输出内容之前要先清理缓冲区,否则可能会出现下载的文件打不开的现象
            ob_end_clean();
            $objWriter->save('php://output');
            exit;

おすすめ

転載: blog.csdn.net/u012830303/article/details/105712246