私は以前、フレームワーク ThinkPHP5.0.24 を使用して、WeChat アプレットの RESTFul API を開発しました。最近、ThinkPHP6.0.2 にアップグレードしたいと考えています。ディレクトリ構造は次のとおりです: --app --api --controller --v1 - -Index. ルートに書き込まれる PHP バージョンは、Route::get('api/:version/home','api/:version.Index/home'); の形式で直接書き込むこともできます。 ThinkPHP6.0.2 でサポートされている場合は、https://blog.csdn.net/qq_35422558/article/details/100563723 を参照してください。この記事では、Web サイトのルート ディレクトリのルート ファイルの下に API フォルダーを作成します。 --route --api --route.php app.php--verdor のような構造を持つ、route.php ルーティング ファイルは Route::get('api/:version/home','api/:version.Index/ を書き込みます) home') api\route.php にあります。 [b]テスト後は無効[/b]。
ThinkPHP6 開発マニュアルを参照すると、ルーティング アドレスはモジュール/コントローラー/オペレーションをサポートしなくなりましたが、コントローラー/オペレーションまたはクラス メソッドは依然としてサポートしていることが明確に指摘されています。したがって、解決策は 3 つあります。
最初の解決策: クラスに定義されたメソッドは Route::get(':version/home','\app\api\controller\:version\index@home') として記述できます。 , api\route\route.php に書かれている場合、アクセス URL は http://localhost/[b]api[/b]/v1/home となります。アプリケーション配下のルート定義にはアプリケーション名を追加する必要があり、route\app.phpに記述した場合、アクセスURLはhttp://localhost/v1/homeとなります。余計なものを加えないように注意してください。
2 番目のタイプ: コントローラー/オペレーションへの定義は、アプリケーション ディレクトリ \route\route.php にのみ記述できます。テスト後、route.php ファイル名は任意に定義できます。 Route\api\route.php では定義できず、テストは無効です。 Route::get(':version/home',:version.Index/home') は、アプリケーション名の部分を定義時に削除し、URL (http://localhost/api/v1/) にアクセスするときに追加します。 home
3 番目のタイプ: シングル アプリケーション モードでマルチレベル コントローラーを使用する --app --controller --api --v1 --Index.php --admin --Index.php --home --Index.php現時点でのルーティング Route\app.phpRoute::get('api/:version/home',api.:version.Index/home')で定義されています
この問題は、多くの ThinkPHP6 チュートリアルでは言及されていません。 1. シングル アプリケーション モードのマルチレベル コントローラーは、api ディレクトリと v1 ディレクトリをコントローラーのサブディレクトリおよび孫ディレクトリとして使用します。構造は上記のとおりです。プロジェクトが 1 つだけの場合は、この方が合理的だと思います。この方法では、管理者とホームの両方で同じビューとモデルを使用できます。
2. マルチアプリケーション モードでは、最初にマルチアプリケーション モード拡張機能をインストールする必要があります。コンポーザーには topthink/think-multi-app が必要です。その後、コントローラー フォルダーを削除します。PHP think build API によってアプリケーション ディレクトリが生成されます。 set auto_multi_app=true コントローラの有無でフレームワークを判定 単一アプリケーションでも複数アプリケーションでも、アプリケーションディレクトリ内にルートディレクトリを作成し、そのディレクトリ内にroute.phpというファイルを作成し、その中にルートを定義します. アプリケーション名は必要なく、アクセス時にURLに追加するだけです。 Route::get(':version/home',:version.Index/home') は URL: http://localhost/api/v1/home
3 に対応します。クラス メソッドにルートします。このメソッドは一般的には使用されません。ただし、上で分析したように、api\route\route.phpとroute\app.phpで定義できますが、アクセスされるURLが異なります。前者はアプリケーション名apiを追加する必要があり、後者は任意のアプリケーション名を追加する必要があります何も加えないでください。
4. 上記の URL を入力したときに「入力ファイルが指定されていません」というメッセージが表示された場合、この問題は http://localhost/index.php にindex.php を追加することで解決できます。提案は、public\.htaccess の RewriteRule ^(.*)$index.php/$1 [QSA,PT,L] の Index.php の後に ? を追加することです。これは RewriteRule ^(.*)$index.php? です。 /$1 [QSA,PT,L]
事在人为