이 글은 thinkphp에 대한 관련 지식을 제공합니다. 양식 데이터 가져오기, 다중 응용 프로그램 모드 설정, 템플릿 렌더링 및 기타 관련 콘텐츠를 포함하여 주로 사용되는 일부 기능을 함께 살펴보겠습니다. .
추천 학습: "PHP 비디오 튜토리얼"
Ali 미러를 변경하는 것입니다: 작곡가 config -g repo.packagist 작곡가 https://mirrors. aliyun.com /composer/
Laravel 중국 미러: 작곡가 config -g repo.packagist 작곡가 https://packagist.laravel-china.org
중국 전체 미러: 작곡가 config -g repo.packagist 작곡가 https :// packagist.phpcomposer.com9
코드 클라우드나 git 다운로드의 경우 벤더가 없어 실행이 안되는 것으로 확인됩니다
composer install --ignore-platform-reqs
또는
composer update - -ignore-platform-reqs
1. tp6
다운로드 Composer create-project topthink/think tp
2 다중 애플리케이션 모드 설정
tp6은 기본적으로 단일 애플리케이션 액세스로 전환됩니다. app/controller 다중 애플리케이션 개발을 수행해야 하는 경우(예: http://***.com/admin, http://***.com/index) 다중 애플리케이션 모드를 활성화해야 합니다.
composer requiretopthink/think-multi-app
php think 빌드 애플리케이션 이름(예: index 또는 admin)
3. 템플릿 렌더링
tp3: $this->display();tp5: return $this->fetch();tp6: return View::fetch('index');
tp6에는 기본적으로 많은 종속성 패키지가 부족하므로 다운로드해야 합니다
composer require topthink/think-view
컨트롤러 소개
use thinkfacadeView;
4. 템플릿 점핑 리디렉션
composer require liliuwei/thinkphp-jump
컨트롤러 소개
헤더 소개: use liliuweithinkJump;
소개 수업 내에서: Jump를 사용하세요.
오류가 보고되면:
앱/구성 보기/ jump.php에
'dispatch_success_tmpl' => app()->getRootPath().'/vendor/qeq66/think-jump/template/jump.html','dispatch_error_tmpl' => app()->getRootPath().'/vendor/qeq66/think-jump/template/jump.html'
5 설정이 있습니까? 양식 데이터 가져오기
컨트롤러는
use think\facade\Request;$code = Request::param('code');
또는
$code = input("code");
를 도입합니다. 6. 디지털 인증 코드
작성기에는 애플리케이션 앱 디렉토리에 topthink/think-captcha
가 필요합니다. 전역 미들웨어 middleware.php 파일을 찾아 아래에 주석 처리된 thinkmiddlewareSessionInit::class 코드를 켜세요
7. Images
Composer require topthink/think-image
8.mysql select query
tp5에서 전환하면 기본 선택 쿼리는 2차원 배열을 반환하고, tp6는 공식적으로는 데이터 세트를 반환한다고 합니다. 기본적으로 배열 작업
과 동일하지만 때로는 배열이 여전히 유용할 때도 있습니다. 예를 들어ar r[k][0] = "test" 이런 종류의 간접 수정은 기본 반환 데이터 세트에 오류를 보고하지만 배열은 이런 방식으로 작동할 수 있습니다
1,
db::name('ceshi')->select()->toArray();
2 ,
/vendor/topthink/think-orm/src/의 BaseQuery.php를 수정하세요. tp6 디렉터리에 db
수정 예는 그림과 같으며, 그림의 빨간색 상자를 삭제하고
$resultSet = $this->connection->select($this);
아래에 한 줄을 추가합니다
return $resultSet;
9.Pagination
$list = db::name('admin_menu')->where($where)->paginate(['list_rows'=> 10,'query' => request()->param(),]);
을 사용합니다. 페이지 매김 데이터를 얻고 컬렉션에 추가할 수 없는 첨자 값을 쿼리하는 페이지 매김 메소드
쿼리 조건에 'query' => request()->param( )를 추가해야 합니다.
해결책:
php side:
// An highlighted block$list = db::name('admin_menu')->where($where)->paginate(['list_rows'=> 10,'query' => request()->param(),]);$new_arr = array();foreach($list as $k=>$v){$v[$k]['erji_menu'] = “案例”;$new_arr[] = $v;} // 获取分页显示$page = $list->render();// 模板变量赋值View::assign('list', $new_arr);View::assign('page', $page);
html side
{$page|raw}
pagination 참조 클래스 수정
tp6vendortopthinkthink-ormsrcpaginatordriverBootstrap.php
10 새로운 데이터 차이
대비 tp5 저장 방법을 사용하여 업데이트 추가 방법을 사용합니다. to add
tp6 save는 업데이트와 추가 모두 add 메소드가 삭제되었습니다
db::name('ceshi')->where(array('tz_id'=>$post['tz_id']))->save($users);db::name('ceshi')->save($users);
기본키 추가는 기본키 없이 업데이트인데 추가하는데 성공하면 문제가 생기고 0,1만 반환됩니다
아니오 tp5 add 메소드처럼 추가된 데이터의 기본 키 ID를 반환합니다
/** * 插入记录 * @access public * @param array $data 数据 * @param boolean $getLastInsID 返回自增主键 * @return integer|string */public function insert(array $data = [], bool $getLastInsID = false){ if (!empty($data)) { $this->options['data'] = $data; } return $this->connection->insert($this, $getLastInsID);}
add 메소드가 insert 메소드로 변경되었습니다. 댓글에는 자동 증가 기본 키를 반환한다고 나와 있지만 여전히 가져오지 못했습니다. 여기서 테스트했을 때 버전 문제인지는 잘 모르겠습니다. 아니면 여기서 자세히 설명하지 않겠습니다.
얻을 수 없는 경우 계속 검색하여 얻을 수 있는 insertGetId가 있는지 찾으면 됩니다. 즉, 빠른 개발을 위해 보통 save를 사용하여 문제를 해결하는데, 자동 증가된 기본 키를 가져와야 할 때는 insertGetId로 변경합니다.
11、tp6 高级查询and和or同时使用
tp6针对and查询和or查询有快捷方法
但是这些快捷方法会有很多局限性,当我们对数据进行一系列的复杂查询时这些快捷方法就会出现很多问题例如:
$where1[] = ["order_khname","like",'%'.$keywords.'%'];$where2[] = ["order_khqq","like",'%'.$keywords.'%'];$where3[] = ["order_khmobile","like",'%'.$keywords.'%'];$where[] = ["order_type","=",$ddzt];$list = db::name('ceshi') ->where($where) ->whereOr([$where1,$where2,$where3]) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(), ]);
这里我们想要的sql格式为:
SELECT * FROM `dc_ceshi` WHERE `order_type` = 0 and ( ( `order_khname` LIKE '%1%' ) OR ( `order_khqq` LIKE '%1%' ) OR ( `order_khmobile` LIKE '%1%' )) LIMIT 0,10
实际生成的格式为:
SELECT * FROM `dc_ceshi` WHERE `order_type` = 0 OR ( `order_khname` LIKE '%1%' ) OR ( `order_khqq` LIKE '%1%' ) OR ( `order_khmobile` LIKE '%1%' ) LIMIT 0,10
这里就可以用到闭包查询(注:这只是我学习tp6的时候遇到的问题然后在tp6文档里面找到的解决方式,直接用原生sql也是可以解决,把where条件直接改成一个自定义的字符串也可以解决,用tp5的连接方式也应该可以但是我没试)
$list = db::name('ceshi') ->where(function ($query) use ($keywords){ $query->where("order_khname","like",'%'.$keywords.'%') ->whereOr("order_khqq","like",'%'.$keywords.'%') ->whereOr("order_khmobile","like",'%'.$keywords.'%'); }) ->where($where) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(),]);
这时候得到sql格式为:
SELECT * FROM `dc_ceshi` WHERE ( `order_khname` LIKE '%1%' OR `order_khqq` LIKE '%1%' OR `order_khmobile` LIKE '%1%' ) AND `order_type` = 0 LIMIT 0,10
已经满足了我的需求,但是还是有一个问题就是如果keywords这个变量没有值的时候他查询的语句格式为:
SELECT * FROM `dc_ceshi` WHERE ( `order_khname` LIKE '%%' OR `order_khqq` LIKE '%%' OR `order_khmobile` LIKE '%%' ) AND `order_type` = 0 LIMIT 0,10
这种情况只需要在加个if判断:
$list = db::name('ceshi') ->where(function ($query) use ($keywords){ if($keywords){ $query->where("order_khname","like",'%'.$keywords.'%') ->whereOr("order_khqq","like",'%'.$keywords.'%') ->whereOr("order_khmobile","like",'%'.$keywords.'%'); } }) ->where($where) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(),]);
12、tp6 find查询变动
tp5、tp3我们查询一个表是否存在数据可以直接查询一条
$datafind = db::name('ceshi')->find();
tp6 find查询必须增加where条件或者order排序,为什么不知道。有大神知道指点下O(∩_∩)O哈哈~
$datafind = db::name('ceshi')->order('ID DESC')->find();
推荐学习:《PHP视频教程》
위 내용은 thinkphp6의 공통 기능 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!