Thinkphp 버전 업그레이드 관련 소개, 5.0에서 5.1로의 업그레이드를 예로 들면:
먼저 5.0의 일반 디렉토리 구조를 살펴보세요:
project 应用部署目录 ├—application 应用目录(可设置) ├—extend 扩展类库目录(可定义) ├—public WEB 部署目录(对外访问目录) ├—runtime 应用的运行时目录(可写,可设置) ├—vendor 第三方类库目录(Composer) ├—thinkphp 框架系统目录
그런 다음 5.1의 일반 디렉토리 구조를 살펴보세요:
www WEB部署目录(或者子目录) ├—application 应用目录 ├—config 应用配置目录 ├—route 路由定义目录 ├—public WEB目录(对外访问目录) ├—thinkphp 框架系统目录 ├—extend 扩展类库目录 ├—runtime 应用的运行时目录(可写,可定制) project 应用部署目录 ├—application 应用目录(可设置) ├—extend 扩展类库目录(可定义) ├—public WEB 部署目录(对外访问目录) ├—runtime 应用的运行时目录(可写,可设置) ├—vendor 第三方类库目录(Composer) ├—thinkphp 框架系统目录 ├—vendor 第三方类库目录(Composer依赖库)
첫 번째 전달 레이어 디렉터리에서 5.1에는 더 많은 구성 및 경로 디렉터리만 있음을 알 수 있습니다. 이는 버전 5.1이 구성 파일과 라우터 파일을 추출했음을 나타냅니다.
아래에서는 wstmart 오픈소스 몰 시스템을 예로 들어 업그레이드를 시도합니다.
먼저 git을 통해 최신 thinkphp5.1 프레임워크를 내보냅니다.
실행하여 결과를 확인합니다.
오픈 소스 몰 wstmart 코드를 가져옵니다.
관련 추천: "ThinkPHP Tutorial"
wstmart 오픈소스 몰의 wstmart 디렉토리에 있는 wstmart를 tp5 디렉토리로 자르고, index.php 파일을 수정하고, 시스템 루트 디렉토리에서 프로젝트가 직접 실행되도록 하고, 그런 다음 수정하세요. 데이터베이스 구성 파일을 확인하고 디버깅 기능을 켜고 실행하세요.
어? ! ! 문제가 발생했나요? 문서를 빠르게 살펴보세요. 문서를 아래로 스크롤하여 살펴보세요. 응? 괜찮은. 너무 조급해서 다 읽지 못한 것으로 드러났습니다. 항목 파일을 다시 정의하면 원래 공용 디렉토리를 가리키는 index.php 파일을 사용할 수 없습니다. 예를 들어 애플리케이션 디렉토리도 정의해야 합니다. : Container::get( 'app')->path(APP_PATH)->run()->send(); 여기서 APP_PATH는 정의할 애플리케이션의 디렉터리입니다.
Container::get('app')->path(__DIR__ . '/wstmart/')->run()->send();
실행하여 확인하세요:
드디어 정상이 되었습니다. 이 결과가 나온 이유는 구성 파일을 수정하지 않고 시스템에 기본 모듈이 home이라고 알려주었기 때문입니다. 그런 다음 app.php 파일에서 'default_module' => 'home'을 수정하고 실행하여 다음을 확인했습니다.
음? 이게 무슨 일이야? 파일이 분명히 존재합니다! ! ! 문서를 자세히 확인해 보니 존재하는군요... 5.1이어야 하고 또 놓친 필수 기능이 있어서 다시 돌아와서 문서를 읽었습니다. 여기저기 검색한 끝에 업그레이드 가이드에서 드디어 이런 문장을 발견했습니다. "애플리케이션 클래스 라이브러리의 네임스페이스를 커스터마이징하는 경우, 애플리케이션 구성 파일 대신 환경 변수 APP_NAMESPACE를 설정해야 합니다. .env 구성 파일을 사용하는 경우 , 여기에 추가할 수 있습니다: APP_NAMESPACE = 애플리케이션 라이브러리 루트 네임스페이스 이름." 알겠어요! ! 그러니 시스템 아래에 .env 파일을 만드세요. 콘텐츠 텍스트: app_namespace=wstmart다시 실행: 이 단락은 이 기능을 찾을 수 없음을 의미합니다. thinkphp5.0 프레임워크에서 시스템은 common 디렉토리에 있는 파일을 자동으로 로드합니다. 5.1에서는 왜 자동으로 로드되지 않습니까? 그래서 thinkphp5.1의 소스코드를 살펴보았습니다. 다음 줄을 참조하세요. 정의되지 않은 배열 아래에 있습니까? 그렇게 이상한 질문인가요? 아래 오류 메시지에서 모듈 홈의 index.php 파일에서 호출되는 getFloors 함수를 찾을 수 있습니다. 오류 메시지는$rs = Db::name('goods_cats')->where(['dataFlag'=>1, 'isShow' => 1,'parentId'=>['in',$ids],'isFloor'=>1]) ->field("parentId,catName,catId")->order('catSort asc')->select();문제가 있습니다. 문서를 다시 살펴보겠습니다. 문서에 따르면 쿼리 생성자의 배열 다중 필드 일괄 쿼리가 변경되었습니다. 원본
where(['name'=>['like','think%'], 'id'=>['>',0],])를
where([['name','like','think%'], ['id','>',0],])로 조정해야 합니다. 위의 지침에 따라 코드를
$rs = Db::name('goods_cats')->where([['dataFlag','=',1], ['isShow','=',1],['parentId','in',$ids],['isFloor','=',1]]) ->field("parentId,catName,catId")->order('catSort asc')->select();로 수정했습니다. 충분하면 이 오류가 더 이상 나타나지 않습니다. 다음은 또 다른 질문입니다. 문서를 참조하세요. 이 기능은 thinkphp5.1에서 수정되었습니다. thinkRequest를 thinkFacadeRequest로 변경했더니 오류가 다시 사라졌습니다. 다음은 오류입니다:
시스템이 이 시점까지 실행될 수 있습니다. 이는 프로그램이 성공적으로 정보를 수신하고 반환할 수 있다는 의미입니다. 페이지의 오류는 사용자 정의 태그 wst:ads의 오류여야 하며 이로 인해 콘텐츠가 반환되지 않습니다. 위의 문제 해결 방법을 따르고 계속해서 디버그로 돌아갔습니다. 업그레이드 중에 레이블을 구성하는 것을 잊어버린 것으로 나타났습니다. 템플릿을 열고 'taglib_pre_load' => 'wstmartcommonTaglibWst' 코드를 추가한 다음 페이지를 새로 고칩니다.
또 다른 익숙한 오류이지만 이번에는 다른 기능을 통해 해결 방법을 찾았습니다. 쉽습니다. 해결해야 하므로 다시는 반복하지 않겠습니다. 기본적으로 모델의 쿼리 기능을 수정하면 됩니다. 이전 방법에 따라 변경한 후 Thinkphp 5.0에서 5.1로 업그레이드를 완료할 수 있습니다.
공간이 제한되어 있기 때문에 디버깅을 위해 스크린샷을 하나씩 찍지는 않겠습니다. 업그레이드하기 전에 모두가 thinkphp의 공식 업그레이드 가이드를 읽어서 저처럼 업그레이드를 완료하기 전에 한 군데씩 채우는 일이 없도록 하세요.
위 내용은 thinkphp를 업그레이드하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!