ホームページ >PHPフレームワーク >ThinkPHP >thinkphpをアップグレードする方法
#5.0 から 5.1 へのアップグレードを例として、php のバージョン アップグレード関連の概要を考えます:
まず、php の一般的なディレクトリ構造を見てください。 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 には config ディレクトリと Route ディレクトリのみが追加されていることがわかります。バージョン 5.1 には、設定ファイルとルーター ファイルがすでに含まれています。
以下では、wstmart オープンソース モール システムを例としてアップグレードを試みます。
まず、最新の thinkphp5.1 フレームワークを git 経由でエクスポートします:
それを実行して結果を見てみましょう:
オープンソース モールの wstmart コードをインポートします。
関連する推奨事項: "ThinkPHP チュートリアル "
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();
実行して確認します:
ようやく正常になりました。この結果の理由は、構成ファイルを変更せず、デフォルトのモジュールがホームであることをシステムに伝えたためです。その後、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' を追加して、ページを更新します。
これもよくあるエラーですが、今回は異なります。 function を使用すると、すでに解決策が見つかったエラーについては簡単に解決できるため、再度繰り返すことはありません。基本的には、モデル内のクエリ関数を変更するだけです。前の方法に従って変更を加えた後、Thinkphp 5.0 から 5.1 へのアップグレードを完了できます。
スペースが限られているため、デバッグのために 1 つずつスクリーンショットを撮ることはしません。最終的にアップグレードを完了する前に、私のように次から次へと穴を埋めることを避けるために、アップグレードする前に、皆さんは thinkphp の公式アップグレード ガイドを読んでください。 。
以上がthinkphpをアップグレードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。