ThinkPHP-3.1、thinkphp-3.1_PHP チュートリアル

WBOY
リリース: 2016-07-13 09:44:23
オリジナル
1300 人が閲覧しました

ThinkPHP-3.1、thinkphp-3.1

基本:

1. 基本概念

ランプ

LAMP は、Linux、Apache、MySQL、PHP をベースにしたオープンソースの Web 開発プラットフォームです。この用語はヨーロッパに由来しており、ヨーロッパではこれらのプログラムが標準の開発環境として一般的に使用されていました。名前は各プログラムの頭文字に由来しています。各プログラムは、その所有権においてオープン ソース標準に準拠しています。Linux はオープン システムであり、Apache は、Web ベースの管理用の追加ツールを備えたリレーショナル データベースです。他の言語の優れた機能の多くを利用して、Web 開発をより効率的にします。 Windows オペレーティング システム上の Linux 環境でこれらのツールを使用する開発者は、WAMP を使用して呼び出されます。
これらのオープン ソース プログラム自体は、他のいくつかのプログラムと連携して動作するように特別に設計されているわけではありませんが、これらはすべて影響力のあるオープン ソース ソフトウェアであり、多くの共通の特性を共有しているため、これらのコンポーネントは一緒に使用されることがよくあります。過去数年間にわたって、これらのコンポーネントの互換性は向上し続けており、それらを組み合わせて使用​​することがより一般的になりました。そして、さまざまなコンポーネント間の連携を改善するために、特定の拡張機能を作成しました。現在、これらの製品は、ほとんどすべての Linux ディストリビューションにデフォルトで含まれています。 Linux オペレーティング システム、Apache サーバー、MySQL データベース、Perl、PHP、または Python 言語、これらの製品が連携して強力な Web アプリケーション プラットフォームを形成します。
オープンソーストレンドの活発な発展に伴い、オープンソースLAMPはJ2EEおよび.Net商用ソフトウェアと三位一体のトレンドを形成しており、ソフトウェア開発プロジェクトはソフトウェアへの投資コストが低いため、IT全体の注目を集めています。コミュニティ。 Web サイトのトラフィックに関しては、LAMP が最も強力な Web サイト ソリューションです。

おっと

オブジェクト指向プログラミング (OOP、オブジェクト指向プログラミング) は、コンピューター プログラミング アーキテクチャです。 OOP の基本原理は、コンピューター プログラムがサブルーチンとして機能する単一のユニットまたはオブジェクトで構成されるということです。 OOP は、再利用性、柔軟性、拡張性というソフトウェア エンジニアリングの 3 つの主な目標を達成します。全体的な操作を実現するために、各オブジェクトは情報を受信し、データを処理し、他のオブジェクトに情報を送信できます。 OOP には主に次の概念とコンポーネントがあります:
コンポーネント - 実行中のコンピューター プログラム内でデータと機能が一緒に形成される単位。コンポーネントは、OOP コンピューター プログラムのモジュールと構造の基礎です。
抽象性 - プログラムには、処理される情報の特定の側面を無視する機能、つまり、情報の主要な側面に焦点を当てる機能があります。
カプセル化 - 情報カプセル化とも呼ばれます。コンポーネントが他のコンポーネントの内部状態を予期しない方法で変更しないことを保証します。内部状態変更メソッドを提供するコンポーネントのみが内部状態にアクセスできます。各タイプのコンポーネントは、他のコンポーネントと通信するためのインターフェイスを提供し、他のコンポーネントが呼び出すメソッドを指定します。
ポリモーフィズム - コンポーネント参照とクラス セットには、他の多くの異なるタイプのコンポーネントが含まれており、参照されたコンポーネントによって生成される結果は、実際の呼び出しタイプによって異なります。
継承 - 既存のコンポーネントに基づいてサブクラス化されたコンポーネントを作成できるようにし、ポリモーフィズムとカプセル化を統合および強化します。通常、クラスはコンポーネントをグループ化するために使用されますが、新しいクラスを既存のクラスの拡張として定義することもできるため、クラスをツリ​​ー構造またはネットワーク構造に編成して、アクションの多用途性を反映できます。
コンポーネントベースのプログラミングは、抽象化、カプセル化、再利用性、使いやすさなどの理由から、スクリプト言語で特に人気があります。

MVC

MVC は、アプリケーションの入力、処理、出力の分離を強制する設計パターンです。 MVC を使用するアプリケーションは、モデル (M)、ビュー (V)、およびコントローラー (C) の 3 つのコア コンポーネントに分割されており、それぞれが独自のタスクを処理します。
View: View は、ユーザーが表示して操作するインターフェイスです。旧式の Web アプリケーションの場合、ビューは HTML 要素で構成されるインターフェイスです。新しいスタイルの Web アプリケーションでも、HTML は依然としてビュー内で重要な役割を果たしていますが、Adobe Flash や一部のマークアップ言語など、いくつかの新しいテクノロジが際限なく登場しています。 XHTML、XML/XSL、WML などの Web サービスアプリケーションのインターフェイスをどのように扱うかは、ますます困難になってきています。 MVC の大きな利点の 1 つは、アプリケーションのさまざまなビューを処理できることです。データがオンラインで保存されているか、従業員のリストで保存されているかにかかわらず、ビューでは実際の処理は発生せず、データを出力してユーザーが操作できるようにする手段としてのみ機能します。
モデル: モデルは企業データとビジネス ルールを表します。 MVC の 3 つのコンポーネントの中で、モデルには最も多くの処理タスクがあります。たとえば、EJB や ColdFusion コンポーネントなどのコンポーネント オブジェクトを使用してデータベースを処理する場合があります。モデルによって返されるデータはニュートラルです。これは、モデルがデータ形式とは何の関係もないことを意味するため、モデルは複数のビューにデータを提供できます。モデルに適用されるコードは 1 回記述するだけで済み、複数のビューで再利用できるため、コードの重複が削減されます。
コントローラー: コントローラーはユーザー入力を受け入れ、モデルとビューを呼び出してユーザーのニーズを満たします。そのため、Web ページ内のハイパーリンクがクリックされて HTML フォームが送信された場合、コントローラー自体は何も出力したり、処理を実行したりしません。リクエストを受信し、リクエストを処理するためにどのモデル コンポーネントを呼び出すかを決定し、モデル処理によって返されたデータを表示するためにどのビューを使用するかを決定するだけです。
次に、MVC の処理プロセスを要約します。まず、コントローラーはユーザーのリクエストを受け取り、処理のためにどのモデルを呼び出すかを決定します。次に、モデルはビジネス ロジックを使用してユーザーのリクエストを処理し、データを返します。データは、対応するビューとともに返され、プレゼンテーション層を通じてユーザーに表示されます。

ORM

オブジェクト/リレーション マッピング (略して ORM) は、オブジェクト指向ソフトウェア開発手法の開発とともに生まれました。オブジェクト指向開発手法は、今日のエンタープライズレベルのアプリケーション開発環境における主流の開発手法であり、リレーショナルデータベースは、エンタープライズレベルのアプリケーション環境でデータを永続的に保存する主流のデータストレージシステムです。オブジェクトとリレーショナル データは、ビジネス エンティティの 2 つの表現形式です。ビジネス エンティティは、メモリ内ではオブジェクトとして表され、データベース内ではリレーショナル データとして表されます。メモリ内のオブジェクト間には関連付けや継承関係がありますが、データベースではリレーショナル データは多対多の関連付けや継承関係を直接表現できません。したがって、オブジェクト リレーショナル マッピング (ORM) システムは一般にミドルウェアの形式で存在し、主にプログラム オブジェクトからリレーショナル データベース データへのマッピングを実装します。
オブジェクト指向はソフトウェア工学の基本原理 (結合、集約、カプセル化など) に基づいて開発されますが、リレーショナル データベースは数学理論に基づいて開発されます。この 2 つの理論には大きな違いがあります。この不一致現象を解決するために、オブジェクト リレーショナル マッピング技術が登場しました。

AOP

AOP(Aspect-Oriented Programming、アスペクト指向プログラミング)は、OOP(Object-Oriented Programming、オブジェクト指向プログラミング)を補完・改良したものと言えます。 OOP では、カプセル化、継承、ポリモーフィズムなどの概念を導入して、オブジェクト階層を確立し、一般的な動作のコレクションをシミュレートします。分散オブジェクトにパブリックな動作を導入する必要がある場合、OOP は無力です。つまり、OOP では上から下への関係を定義できますが、左から右への関係の定義には適していません。例えばロギング機能。ロギング コードは、すべてのオブジェクト階層にわたって水平に分散される傾向があり、分散先のオブジェクトのコア機能とは何の関係もありません。セキュリティ、例外処理、透過的な永続性など、他のタイプのコードにも同じことが当てはまります。この種の無関係なコードが随所に散在することは、OOP 設計では横断的コードと呼ばれ、大量のコードの重複につながり、さまざまなモジュールの再利用に役立ちません。 AOP テクノロジーはその逆で、「クロスカッティング」と呼ばれるテクノロジーを使用して、カプセル化されたオブジェクトの内部を解剖し、複数のクラスに影響を与えるパブリックな動作を再利用可能なモジュールにカプセル化し、それを「アスペクト」と呼びます。側面。いわゆる「アスペクト」とは、簡単に言えば、システム内のコードの重複を減らし、結合を減らすために、ビジネスとは関係がないが、ビジネス モジュールによって共同で呼び出されるロジックや責任をカプセル化することです。モジュール間の信頼性を高め、将来の信頼性を高めます。 AOP は水平関係を表します。「オブジェクト」がオブジェクトのプロパティと動作をカプセル化する中空の円筒である場合、アスペクト指向のプログラミング手法は、これらの中空の円筒を細かく切り分けるようなものです。中の情報。カットされた断面はいわゆる「アスペクト」です。そして、これらの切断部分を驚異的な技術で跡形もなく復元しました。
「横断的」テクノロジーを使用して、AOP はソフトウェア システムを 2 つの部分、つまり中核的な関心事と横断的な関心事に分割します。業務処理のメインプロセスが中心的な関心事であり、それとあまり関係のない部分が横断的な関心事です。横断的な懸念事項の特徴の 1 つは、それらが中核的な懸念事項の複数の場所で発生することが多いですが、基本的にはどこでも同様であるということです。権限認証、ロギング、トランザクション処理など。 Aop の役割は、システム内のさまざまな懸念事項を分離し、中核的な懸念事項と横断的な懸念事項を分離することです。アバナードのシニア ソリューション アーキテクトであるアダム マギー氏が述べたように、AOP の中心的な考え方は、「アプリケーション内のビジネス ロジックを、それをサポートする共通サービスから分離する」ことです

カード

CURDとはデータベーステクノロジーの略称で、一般的なプロジェクト開発における各種パラメータの基本的な機能を指します。これは、作成、更新、読み取り、および削除の操作を表します。 CURD は、データを処理するための基本的なアトミック操作を定義します。 CURD が技術的に難しいレベルにまで引き上げられている理由は、複数のデータベース システムで CURD 操作を含む集計関連アクティビティを完了するパフォーマンスが、データ関係の変化に応じて大きく異なる可能性があるためです。
CURD は、特定のアプリケーションで作成、更新、読み取り、および削除メソッドを必ずしも使用するわけではありませんが、それらが実行する機能は同じです。たとえば、ThinkPHP は、add、save、select、および delete メソッドを使用して、モデルの CURD 操作を表します。

アクティブレコード

アクティブ レコード (中国語名: アクティブ レコード) は、リレーショナル データベースのテーブルに対応するモデル クラスと、テーブル内のレコードの行に対応するモデル クラスのインスタンスによって特徴付けられるドメイン モデル パターンです。 Active Record と Row Gateway はよく似ていますが、前者はドメイン モデル、後者はデータ ソース モデルです。リレーショナル データベースは、多くの場合、外部キーを通じてエンティティの関係を表現します。また、Active Record は、この関係をデータ ソース レベルでのオブジェクトの関連付けと集計にマップします。 Active Record は、非常に単純なドメイン要件、特にドメイン モデルとデータベース モデルが非常に似ている場合に適しています。より複雑なドメイン モデル構造 (継承と戦略を使用したドメイン モデルなど) が発生した場合は、多くの場合、データ ソースを分離し、それをデータ マッパーと組み合わせるドメイン モデルを使用する必要があります。
Active Recordドライバーフレームワークは一般的にORMフレームワークの機能を備えていますが、Row Gatewayとの違いと同様に、Active Recordは単純なORMではありません。 Rails によって最初に提案されたこのモデルは、テーブルがレコードにマップされ、レコードがオブジェクトにマップされ、フィールドがオブジェクトのプロパティにマップされるという標準 ORM モデルに従っています。次の命名規則と構成規則を使用すると、モデルの操作を大幅に迅速に実現でき、簡潔で理解しやすくなります。

単一入口

単一エントリは、通常、プロジェクトまたはアプリケーションに統合された (ただし、必ずしも一意である必要はない) エントリ ファイルがあることを意味します。つまり、プロジェクトのすべての機能操作がこのエントリ ファイルを通じて実行され、多くの場合、エントリ ファイルが最初のステップで実行されます。
入り口が 1 つであることの利点は、同じ入り口にはさまざまな操作に対して同じルールが適用されることが多いため、プロジェクト全体が比較的標準化されていることです。また、入口が単一であることのメリットとして、傍受が便利なため制御が柔軟になり、一部の権限制御やユーザーログインなどの判断や操作を統一的に処理できることも挙げられます。
すべての Web サイトが 1 つのエントリ ファイルを通じてアクセスされるのではないかと心配する人もいるかもしれませんが、実際、これは根拠のない考えです。

2. ディレクトリ構造

ディレクトリ/ファイル 説明
ThinkPHP.php フレームワークエントリーファイル
共通 フレームワークの公開ファイルディレクトリ
会議 フレームワーク設定ファイルのディレクトリ
ラング フレームワークシステム言語ディレクトリ
リブ システムコア基本クラスライブラリディレクトリ
Tpl システムテンプレートディレクトリ
延長 フレームワーク拡張ディレクトリ (拡張ディレクトリの詳細については、後述の拡張機能の章を参照してください)
注: コア バージョンをダウンロードすると、ThinkPHP 自体は拡張機能に依存しないため、Extend ディレクトリが空になる可能性があります。

3. 命名規則

ThinkPHP を使用して開発する場合は、次の命名規則に従うようにしてください。
  • クラス ファイルにはすべて .class.php という接尾辞が付けられます (これは、ThinkPHP によって内部的に使用されるクラス ライブラリ ファイルを指し、外部からロードされるクラス ライブラリ ファイルを表すものではありません)。名前はキャメル ケースを使用して付けられ、最初の文字は大文字になります。 DbMysql.class.php;
  • Unix 系システムでは大文字と小文字が区別されるため、ファイル名と呼び出しでは大文字と小文字が区別されるようにしてください (ThinkPHP はデバッグ モードの Windows プラットフォームでも大文字と小文字を厳密にチェックします)。
  • クラス名とファイル名は一致しています(上記の大文字と小文字を含む)。たとえば、UserAction クラスのファイル名は UserAction.class.php、InfoModel クラスのファイル名は InfoModel.class です。 php、およびさまざまなクラス ライブラリのクラス名は特定の標準です
  • 関数、設定ファイル、その他のクラス ライブラリ以外のファイルには、通常、.php という接尾辞が付けられます (サードパーティによって導入されたファイルは必須ではありません)。
  • get_client_ip; などの関数に名前を付けるときは、小文字とアンダースコアを使用します
  • メソッドはキャメルケースを使用して名前が付けられ、getUserName、_parseType など、最初の文字は小文字またはアンダースコア「_」が使用されます。通常、アンダースコアで始まるメソッドはプライベート メソッドです。
  • 属性に名前を付けるときはキャメルケースを使用し、最初の文字は小文字にするか、アンダースコア「_」を使用する必要があります (tableName、_instance など)。通常、アンダースコアで始まる属性はプライベート属性です。
  • 二重アンダースコア「__」で始まる関数またはメソッドは、__call や __autoload などのマジック メソッドとして使用されます。
  • 定数名は、HAS_ONE や MANY_TO_MANY のように、大文字とアンダースコアで名前が付けられます。
  • 構成パラメータは、HTML_CACHE_ON のように大文字とアンダースコアで名前が付けられます。
  • 言語変数は、MY_LANG のように、大文字とアンダースコアで名前が付けられます。アンダースコアで始まる言語変数は、通常、_CLASS_NOT_EXIST_;
  • などのシステム言語変数に使用されます。
  • 変数の名前付けに必須の仕様はなく、チームの仕様に従って行うことができます;
  • ThinkPHP のテンプレート ファイルは、デフォルトで接尾辞として .html になります (設定を通じて変更可能)。
  • データ テーブルとフィールドの名前は小文字で下線を引く必要があり、think_user テーブルや user_name フィールドなど、フィールド名がアンダースコアで始まらないように注意してください。_username などのデータ テーブル フィールドはフィルタリングされる可能性があります。
  • ThinkPHP では、関数の名前付けには特殊なケースがあり、これは 1 文字の大文字関数です。このような関数は通常、特定の操作のショートカット定義であるか、特別な関数を持っています。例えばADSL方式など。
  • もう 1 つの非常に重要な点は、ThinkPHP はデフォルトで UTF-8 エンコーディングを使用するため、プログラム ファイルが UTF-8 エンコーディング形式で保存されていることを確認し、BOM 情報ヘッダーを削除してください (BOM ヘッダー情報を削除するにはさまざまな方法がありますが、それぞれに異なります)エディタなどの設定方法があり、一元的に検出・処理するツールを使用することもできます)、そうしないと予期せぬ問題が発生する可能性があります。
  • 4. CBD アーキテクチャ

    ThinkPHP バージョン 3.0 では、新しい CBD (コア + ビヘイビア + ドライバー) アーキテクチャ モデルが導入されています。これは、フレームワークがコア + ビヘイビア + ドライバー アーキテクチャ システムを採用しているため、コアは最も重要な部分を保持し、重要な位置に設定されています。はマーキングに使用され、他の機能は動作拡張機能とドライバーを使用して結合されます。開発者は、独自のニーズに応じて特定のタグ位置の動作を拡張または置き換えることができ、フレームワークの最下層またはアプリケーション層を簡単にカスタマイズできます。独自のラベル位置を追加し、適用行を追加します。ラベルの位置は、AOP 概念の「アスペクト」に似ており、システムの組み込みコア拡張機能が標準モードとみなされる場合、ユーザーはこれらの動作をすべてカスタマイズできます。実際、パターン拡張は動作を置き換えたり追加したりするだけでなく、基礎となる MVC を置き換えたり変更したりして、カスタマイズされた目的を達成することもできます。この新機能を使用すると、開発者はパターン拡張機能を通じて自分自身または自社の開発フレームワークを簡単にカスタマイズできます。パターン拡張機能の新しいバージョンは、フレームワーク拡張機能のマスターであり、新しいマイルストーンを作成します。これがまさに新しいバージョンの本当の美しさです。 。

    5.開発プロセス

    ThinkPHP を使用してアプリケーションを作成する一般的な開発プロセスは次のとおりです。
    • システム設計、データベースとデータテーブルの作成(オプション)
    • プロジェクトに名前を付けてプロジェクトエントリファイルを作成し、デバッグモードをオンにします。
    • プロジェクト構成を完了する;
    • プロジェクト関数ライブラリを作成する(オプション)
    • 開発プロジェクトに必要な拡張機能(モード、ドライバー、タグライブラリなど)(オプション)
    • コントローラークラスを作成する;
    • モデルクラスを作成する(オプション)
    • テンプレートファイルを作成する;
    • 実行とデバッグ、ログの分析;
    • キャッシュ機能を開発および設定する(オプション)
    • ルーティングサポートを追加します(オプション)
    • セキュリティチェック(オプション)
    • 実稼働環境にデプロイします。
    6. エントリーファイル

    ThinkPHP は、プロジェクトのデプロイメントとアクセスに単一入口モードを採用しており、どの機能が完了しても、プロジェクトには統一された (ただし、唯一であるとは限りません) 入口があります。すべてのプロジェクトはエントリ ファイルから始まり、すべてのプロジェクトのエントリ ファイルには主に次のものが含まれます。

      フレームワークパス、プロジェクトパス、プロジェクト名を定義します(オプション)
    • デバッグモードと実行モードに関連する定数を定義します(オプション)
    • フレームワークエントリーファイルをロードします(必須)
    7. プロジェクトディレクトリ

    生成されたプロジェクト ディレクトリ構造は、システム ディレクトリに似ており、次のものが含まれます。

    目次説明共通プロジェクトのパブリック ファイル ディレクトリ。通常はプロジェクトのパブリック機能が配置されます会議プロジェクト構成ディレクトリ。すべてのプロジェクト構成ファイルはここに配置されますラングプロジェクト言語パックのディレクトリ (オプション、多言語サポートが必要ない場合は削除できます)リブプロジェクト クラス ライブラリ ディレクトリ (通常はアクションとモデルのサブディレクトリが含まれます)Tplプロジェクトテンプレートディレクトリ、テンプレートテーマをサポートランタイム プロジェクトのランタイム ディレクトリには、Cache (テンプレート キャッシュ)、Temp (データ キャッシュ)、Data (データ ディレクトリ)、および Logs (ログ ファイル) のサブディレクトリが含まれます。グループがある場合は、グループ ディレクトリが最初になります。 Index.php を App ディレクトリの外に移動する必要がある場合は、プロジェクト名とプロジェクト パス定義をエントリ ファイルに追加するだけです。
    1. //プロジェクト名を定義します
    2. define('APP_NAME', 'App');
    3. //プロジェクトパスを定義します
    4. define('APP_PATH', './App/');
    5. //フレームをファイルにロードします
    6. './App/ThinkPHP/ThinkPHP.php' が必要です;
    APP_NAME はプロジェクト名を指します。通常、プロジェクトのディレクトリ名を任意に設定しないでください。プロジェクトが Web ルート ディレクトリの直下にデプロイされている場合は、APP_NAME を空に設定する必要があります。
    APP_PATH はプロジェクト パスを指します (「/」で終わる必要があります) プロジェクト パスは、プロジェクト エントリ ファイルの場所ではなく、プロジェクトの Common ディレクトリと Lib ディレクトリの場所を指します。
    注: Unix のような環境または Linux 環境では、ランタイム ディレクトリに書き込み可能なアクセス許可が必要です。

    8. デプロイメントディレクトリ

    ディレクトリ/ファイル説明
    PHP について考える システムディレクトリ(以下のディレクトリ構造は上記のシステムディレクトリと同じです)
    公開 ウェブサイトのパブリックリソースディレクトリ (ウェブサイトの Css、Js、写真、その他のリソースを保存)
    アップロード Webサイトアップロードディレクトリ(ユーザーがアップロードする統合ディレクトリ)
    ホーム プロジェクトディレクトリ(以下のディレクトリ構成は上記のアプリケーションディレクトリと同じです)
    管理者 バックエンド管理プロジェクトディレクトリ
    …その他のプロジェクト ディレクトリ
    index.php プロジェクトホームのエントリーファイル
    管理者.php プロジェクト管理者のエントリファイル
    ...その他のプロジェクト エントリ ファイル
    プロジェクトのテンプレート ファイルは引き続きプロジェクトの Tpl ディレクトリに配置されますが、画像、JS、CSS を含む外部から呼び出されるリソース ファイルは Web サイトのパブリック ディレクトリ Public に配置され、Images、Js、および Css に保存されます。可能であれば、これらのリソース ファイルをリモート呼び出し用に外部サーバーに個別に配置して最適化することもできます。

    実際、システム ディレクトリとプロジェクト ディレクトリは非 WEB アクセス ディレクトリの下に配置でき、Web サイト ディレクトリの下にはパブリック ディレクトリとエントリ ファイルのみを配置する必要があるため、Web サイトのセキュリティが向上します。

    ディレクトリを自分で設定したい場合は、エントリ ファイルの RUNTIME_PATH 定数を変更できます。例:
    1. define('RUNTIME_PATH','./App/temp/');
    RUNTIME_PATH ディレクトリには書き込み権限を設定する必要があることに注意してください。
    コンパイル キャッシュ ディレクトリのカスタマイズに加えて、コンパイル キャッシュ ファイル名のカスタマイズもサポートされています。例:
    1. define('RUNTIME_FILE','./App/temp/runtime_cache.php');
    ThinkPHP フレームワークのすべての構成ファイルの定義形式は、PHP 配列を返します。形式は次のとおりです。
      //プロジェクト構成ファイル
    1. 配列を返す(
    2. 'DEFAULT_MODULE' => 'インデックス', //デフォルトモジュール
    3. 'URL_MODEL' => '2', //URL モード
    4. 'SESSION_AUTO_START' => true, //セッションを開くかどうか
    5. //その他の設定パラメータ
    6. //...
    7. );
    設定パラメータは大文字と小文字が区別されません(定義が大文字か小文字かに関係なく、小文字に変換されるため)
    構成ファイルで 2 次元配列を使用して、さらに多くの情報を構成することもできます。例:
      //プロジェクト構成ファイル
    1. 配列を返す(
    2. 'DEFAULT_MODULE' => 'インデックス', //デフォルトモジュール
    3. 'URL_MODEL' => '2', //URL モード
    4. 'SESSION_AUTO_START' => true, //セッションを開くかどうか
    5. 'USER_CONFIG' =>
    6. 'USER_AUTH' =>
    7. 「USER_TYPE」=> 2,
    8. )、
    9. //その他の設定パラメータ
    10. //...
    11. );
    12. 二次パラメータの設定では大文字と小文字が区別されることに注意してください。これは、読み取り値が定義と一致している必要があることを意味します。
    13. 9. 従来の構成、プロジェクト構成、デバッグ構成
    14. 設定よりも規約を重視することは、システムが従う重要な考え方です。システムには、ほとんどの用途に応じてデフォルトで共通パラメータを設定する組み込みの規約設定ファイル (システム ディレクトリにある Confconvention.php) があります。 プロジェクト構成ファイルは、最も一般的に使用される構成ファイルであり、プロジェクトの構成ファイル ディレクトリ Conf の下にあり、ファイル名は config.php です。
    プロジェクト設定ファイルに組み込みパラメータ設定を追加するだけでなく、プロジェクトに必要な追加の設定パラメータを追加することもできます。 アプリケーションの状態が構成されていない場合、システムはデフォルトでデバッグ状態になります。これは、デフォルトの構成パラメーターが次のことを意味します:

    'APP_STATUS' => 'debug', //アプリケーションのデバッグモードのステータス
      debug.php 構成ファイルでは、プロジェクト構成ファイルおよびシステム デバッグ構成ファイルから別のパラメーターまたは新しいパラメーターを構成するだけで済みます。
    1. テストステータスなど、デバッグモードでアプリケーションのステータスを追加したい場合は、プロジェクト構成ファイルの設定を次のように変更できます:
    'APP_STATUS' => 'test', //アプリケーションのデバッグモードのステータス
    1. デバッグ モードにはキャッシュがないため、より多くのファイル IO 操作とテンプレートのリアルタイム コンパイルが必要となるため、デバッグ モードをオンにするとパフォーマンスがある程度低下しますが、パフォーマンスには影響しません。展開モードの。
    2. 注: デバッグ モードをオフにすると、プロジェクトのデバッグ構成ファイルはすぐに無効になります。

    10. グループ設定と読み取り設定、動的設定
    モジュールのグループ化が有効な場合、各グループの構成ファイルを個別に定義できます。グループ化構成ファイルは次の場所にあります。
    プロジェクト構成ディレクトリ/グループ名/config.php

    次の構成を通じてグループ化を有効にできます。

    'APP_GROUP_LIST' => 'Home,Admin', //プロジェクトグループ設定

    'DEFAULT_GROUP' => 'ホーム', //デフォルトグループ
    1. Home と Admin の 2 つのグループが定義されたので、次のようにグループ構成ファイルを定義できます:
    2. Conf/Home/config.php
    3. Conf/Admin/config.php
    4. 各グループの構成ファイルは、現在のグループの定義形式はプロジェクトの構成と同じです。
    注: グループ名は大文字と小文字が区別され、定義されたグループ名と一致している必要があります。 構成ファイルを定義した後、システムが提供する C メソッドを使用して (奇妙に感じた場合は、覚えやすくするために Config という単語を使用できます)、既存の構成を読み取ることができます:
    1. C('パラメータ名')//設定されているパラメータ値を取得します
    たとえば、C('APP_STATUS') は、システムのデバッグ モードの設定値を読み取ることができます。APP_STATUS がまだ存在しない場合は、NULL が返されます。 C メソッドを使用して 2D 構成を読み取ることもできます:
    1. C('USER_CONFIG.USER_TYPE')//ユーザー構成内のユーザータイプ設定を取得します
    設定パラメータはグローバルに有効であるため、C メソッドは、特定の設定パラメータの有効期限が切れた場合でも、どこからでも任意の設定を読み取ることができます。 特定の Action メソッドでは、主に使用されていないパラメーターなど、特定のパラメーターを動的に構成できます。
    新しい値を設定します:
    1. C('パラメータ名','新しいパラメータ値');
    たとえば、データ キャッシュの有効期間を動的に変更する必要がある場合は、次を使用できます
    1. C('DATA_CACHE_TIME','60');
    また、次のように操作にドット構文を使用して、2 次元配列の読み取りと設定をサポートすることもできます:
    設定されているパラメーター値を取得します:
    1. C('USER_CONFIG.USER_TYPE');
    新しい値を設定します:
    1. C('USER_CONFIG.USER_TYPE','1');
    バージョン 3.1 以降、C 関数は設定保存機能をサポートします。これはバッチ設定でのみ有効です。 使用方法:
    1. C($array,'name');
    array は、名前で指定されたキャッシュ データに一括設定された設定パラメーター リストを保存する配列変数です。

    キャッシュされた設定リスト データを取得する
      を使用できます。
    1. C('','name') //または C(null,'name');
    名前で識別されるキャッシュされた構成データは、現在の構成データに読み込まれます (マージ)。

    11. 拡張構成

    プロジェクト構成ファイルは、デプロイメント・モード中にコンパイル・キャッシュに組み込まれます。つまり、コンパイル後のプロジェクト構成ファイルの変更は、すぐには有効になりません。有効にする前に、コンパイル・キャッシュを削除する必要があります。拡張設定ファイルはこの制限の影響を受けません。展開モードでも、変更された設定はリアルタイムで有効になり、設定形式はプロジェクト設定と同じになります。
    拡張機能の構成を設定する方法は次のとおりです(複数のファイルをカンマで区切ります):
    1. 'LOAD_EXT_CONFIG' => 'user,db', // 拡張設定ファイルをロードします
    プロジェクトは、ユーザー構成とデータベース構成にそれぞれ拡張構成ファイル user.php と db.php をロードするように設定されており、プロジェクト構成ディレクトリの下にある構成ファイル Conf/user.php と Conf/db.php が自動的にロードされます。 。 二次構成方法を使用する場合は、次のように設定できます:
    1. 'LOAD_EXT_CONFIG' =>
    2. 'USER' => 'user', //ユーザー設定
    3. 'DB' => 'db', //データベース設定
    4. ), //拡張設定ファイルをロードします
    5. user.php 設定ファイルの内容は同じですが、ユーザーパラメータを取得する最終的な方法は次のようになります:
      C('USER.USER_AUTH_ID');
    1. この方法により、大規模なプロジェクトの状況でのパラメーターの競合の問題を回避できます。 次の構成ファイルの一部はシステムによってすでに使用されているため、カスタム拡張構成として再定義しないでください。
    ファイル名説明config.phpプロジェクト設定ファイルtags.phpプロジェクトの行動プロファイルエイリアス.phpプロジェクトエイリアス定義ファイルdebug.phpプロジェクトデバッグモード設定ファイル(およびプロジェクトによって設定されたAPP_STATUSに対応する設定ファイル)core.phpコア コンパイル リスト ファイルがプロジェクトに追加されます (コア コンパイル リストは上書きされません)

    12.関数ライブラリ

    ThinkPHP の関数ライブラリは、システム関数ライブラリとプロジェクト関数ライブラリに分類できます。

    システム関数ライブラリ

    ライブラリ システム関数ライブラリはシステムの Common ディレクトリの下にあり、次の 3 つのファイルがあります。
    common.php はグローバルにロードする必要があり、いつでも直接呼び出すことができる基本関数ライブラリです。
    functions.php はパブリック関数です。フレームワーク標準モードのライブラリ、およびその他 このモードは、独自のパブリック関数ライブラリのロードを置き換えたり、パブリック関数ライブラリ内の関数を再定義したりできます。
    runtime.php は、デバッグ モードまたはコンパイル プロセスでのみロードされるフレームワーク ランタイム ファイルです。 、そのため、その中のメソッドはプロジェクト内にあります。直接呼び出すことはできません。

    プロジェクト関数ライブラリ

    ライブラリ プロジェクト関数ライブラリは、通常、プロジェクトの Common ディレクトリにあります。このファイルは、グループ展開方法が使用されている場合、実行中に自動的にロードされ、プロジェクトのコンパイル統合キャッシュにマージされます。 「グループ名/function.php」ファイルも現在のグループの実行に応じて自動的にロードされるため、プロジェクト関数ライブラリ内のすべての関数を手動でロードせずに直接使用できます。
    プロジェクト構成で動的関数ロード構成が使用されている場合、プロジェクト Common ディレクトリーの下にさらに多くの関数ファイルが存在する可能性があり、動的にロードされた関数ファイルはコンパイル キャッシュに含まれません。
    特殊なケースでは、モードによって、自動的にロードされるプロジェクト ライブラリの場所や名前が変更されることがあります。

    拡張関数ライブラリ

    ライブラリ 必要に応じて読み込みと呼び出しを容易にするために、プロジェクトのパブリック ディレクトリの下に拡張関数ライブラリを定義できます。拡張機能ライブラリの関数定義仕様は、関数ライブラリのファイル名を任意に指定できる点を除き、プロジェクト関数ライブラリと同様です。 通常、拡張機能ライブラリはダイナミックローディングの設定をしないと自動的にロードされません。 。

    機能ロード

    システム関数ライブラリとプロジェクト関数ライブラリの関数は、ロードせずに直接呼び出すことができます。プロジェクトの拡張関数ライブラリの場合、次の 2 つの方法で呼び出すことができます:
    動的読み込み
    プロジェクト設定ファイルで LOAD_EXT_FILE パラメータを定義できます。例:
    1. "LOAD_EXT_FILE"=>"ユーザー,データベース"
    上記の設定により、プロジェクトのpublicディレクトリ配下の拡張機能ライブラリファイルuser.php、db.phpが実行時に自動的に読み込まれ、拡張機能ライブラリuser.php、db.phpを直接呼び出せるようになります。プロジェクト機能、拡張機能ライブラリの機能変更がリアルタイムに反映されます。

    手動ロード
    関数が個々のモジュールによって時々のみ使用される場合は、次のように、呼び出す必要があるときに、load メソッドを使用して手動でロードできます。
      load("@.user")
    1. @.user は、現在のプロジェクトのユーザー関数ファイルをロードすることを意味し、user.php 関数ライブラリ内の関数を直接拡張できます。
    13. クラスライブラリ

    ThinkPHP のクラス ライブラリには、基本クラス ライブラリとアプリケーション クラス ライブラリが含まれています。システムのクラス ライブラリの命名規則は次のとおりです。

    クラスライブラリルール例コントローラークラスモジュール名+アクション例: UserAction、InfoAction モデルクラスモデル名+モデル例: UserModel、InfoModel行動カテゴリー行動名+行動例: CheckRouteBehaviorウィジェットクラスウィジェット名+ウィジェット例: BlogInfoWidgetドライバークラスエンジン名+ドライバー名たとえば、DbMysql は mysql データベース ドライバーを表し、CacheFile はファイル キャッシュ ドライバーを表します
    基本クラスライブラリ

    基本クラス ライブラリとは、ThinkPHP のコア基本クラス ライブラリと拡張基本クラス ライブラリを含む、ThinkPHP クラス ライブラリ仕様に準拠したシステム クラス ライブラリを指します。コア基本クラス ライブラリ ディレクトリはシステムの Lib ディレクトリにあり、拡張基本クラス ライブラリは Extend/Library ディレクトリにあり、ORG および Com 拡張クラス ライブラリを拡張できます。 。コア基本クラス ライブラリの役割は、次のようなフレームワークの汎用開発を完了するために必要な基本クラスと組み込みサポート クラスを完成させることです。

    ディレクトリ呼び出しパス説明ライブラリ/コアThink.Coreコアライブラリパッケージリブ/行動思考・行動組み込みの動作ライブラリ パッケージライブラリ/ドライバー考えるドライバー内蔵ドライバーライブラリパッケージライブラリ/テンプレートThink.テンプレート組み込みのテンプレートエンジンライブラリパッケージコア クラス ライブラリ パッケージには、次のコア クラス ライブラリが含まれています。
    クラス名 説明
    アクション システム基本コントローラークラス
    アプリ システムアプリケーションクラス
    行動 システム動作基礎クラス
    キャッシュ システムキャッシュクラス
    DB システム抽象データベースクラス
    派遣者 URLスケジュールクラス
    ログ システムログクラス
    モデル システム基本モデルクラス
    考える システムエントリと静的クラス
    ThinkException システム基本例外クラス
    見る クラスを見る
    ウィジェット システムウィジェット基本クラス

    アプリケーションライブラリ

    アプリケーション クラス ライブラリは、プロジェクトで定義または使用されるクラス ライブラリを指します。これらのクラス ライブラリも、ThinkPHP の命名規則に従います。アプリケーション ライブラリ ディレクトリは、プロジェクト ディレクトリの下の Lib ディレクトリにあります。アプリケーション ライブラリには、アクション ライブラリ、モデル ライブラリ、またはその他のツール ライブラリを含む幅広い範囲があり、通常は次のものが含まれます。
    ディレクトリ 呼び出しパス 説明
    リブ/アクション @.アクションまたは自動ロード コントローラークラスライブラリパッケージ
    ライブラリ/モデル @.Model または自動ロード モデルクラスライブラリパッケージ
    リブ/行動 メソッド B を使用して自動的に呼び出すかロードします アプリケーション動作ライブラリパッケージ
    ライブラリ/ウィジェット Wメソッドを使用してテンプレート内で呼び出す ウィジェットクラスライブラリパッケージを適用する
    プロジェクトは、独自のニーズに応じて、Lib/Common、Lib/Tool などの独自のクラス ライブラリ パッケージをプロジェクト クラス ライブラリ ディレクトリに追加できます。

    クラスライブラリのインポート

    1. 明示的なインポート

    ThinkPHP は Java のクラス ライブラリのインポート メカニズムをシミュレートし、インポート メソッドを均一に使用してクラス ファイルをロードします。インポート メソッドは、ThinkPHP の組み込みクラス ライブラリ インポート メソッドであり、便利で柔軟なファイル インポート メカニズムを提供し、PHP の require メソッドと include メソッドを完全に置き換えることができます。例:
    1. import("Think.Util.Session");
    2. import("App.Model.UserModel");
    インポート メソッドにはキャッシュと検出のメカニズムがあり、別の場所から同じ名前のクラス ライブラリ ファイルがインポートされることはありません。 注: Unix または Linux ホストでは大文字と小文字が異なるため、インポート メソッドを使用する場合は、ディレクトリ名とクラス ライブラリ名の大文字と小文字に注意してください。そうしないと、インポートは失敗します。インポート方法の場合、システムはインポートされたクラス ライブラリ ファイルの場所を自動的に識別します。ThinkPHP の規則では、Think、ORG、および Com パッケージのインポートは基本クラス ライブラリとしてインポートされます。それ以外の場合は、基本クラス ライブラリとみなされます。プロジェクト アプリケーション クラス ライブラリのインポート。
    1. import("Think.Util.Session");
    2. import("ORG.Util.Page");
    上記の 2 つのメソッドは、Think 基本クラス ライブラリの Util/Session.class.php ファイルと ORG 拡張クラス ライブラリ パッケージの Util/Page.class.php ファイルをそれぞれインポートします。
    プロジェクトのアプリケーション クラス ライブラリ ファイルをインポートするのも非常に簡単で、基本クラス ライブラリをインポートする方法と似た次の方法を使用するだけです。
      import("MyApp.Action.UserAction");
    1. import("MyApp.Model.InfoModel");
    2. 上記のメソッドはそれぞれ、MyApp プロジェクトの下に Lib/Action/UserAction.class.php クラス ファイルと Lib/Model/InfoModel.class.php クラス ファイルをインポートすることを表します。 通常、必要なクラス ライブラリ ファイルを現在のプロジェクトにインポートするため、次のメソッドを使用してコードを簡素化できます
      import("@.Action.UserAction");
    1. import("@.Model.InfoModel");
    2番目、エイリアスインポート

    名前空間インポート メソッドに加えて、インポート メソッドでもエイリアス インポートをサポートできます。エイリアス インポートを使用するには、まずプロジェクト構成ディレクトリにエイリアスを追加して、必要なクラス ライブラリ エイリアスを定義する必要があります。たとえば、プロジェクトで使用されます:

      配列を返す(
    1. 'rbac' =>LIB_PATH.'Common/Rbac.class.php',
    2. 'page' =>LIB_PATH.'Common/Page.class.php',
    3. );
    4. これで、今すぐ直接使用できます:
      import("rbac");
    1. import("ページ");
    2. Rbac クラスと Page クラスのインポート。エイリアス インポート メソッドは、インポート メソッドの 2 番目と 3 番目のパラメーターの使用を禁止します。欠点は、関連するエイリアスを名前空間インポート メソッドで定義する必要があることです。前進。
    サードパーティライブラリをインポートする

    サードパーティのクラス ライブラリは、システム拡張ディレクトリの下の Vendor ディレクトリに一律に配置され、ベンダー メソッドを使用してインポートされます。ただし、パラメータはデフォルト値が変更されている点を除き、インポート メソッドと同じです。たとえば、Vendor ディレクトリの下に Zend の FilterDir.php を配置します。このとき、Dir ファイルのパスは次のようになります。 VendorZendFilterDir.php では、ベンダー メソッドを使用してインポートして使用します:

      ベンダー('Zend.Filter.Dir');
    1. Dir クラス ライブラリをインポートできます。
    Vendor メソッドは、インポート メソッドと同じ基本的なパスとファイル名のサフィックス パラメーターもサポートできます。例:
      Vendor('Zend.Filter.Dir',dirname(__FILE__),'.class.php');
    自動読み込み

    ほとんどの場合、クラス ライブラリを手動でインポートする必要はありませんが、構成を通じて自動ロード メカニズムを使用できます。これにより、パフォーマンスが大幅に向上します。自動ロードには、ロードの優先順位に応じて、エイリアスの自動ロード、システム ルールの自動ロード、カスタム パスの自動ロードの 3 つの状況があります。 1. エイリアスの自動読み込み

    エイリアスを定義する方法については前述し、インポート メソッドを使用してエイリアスをインポートしました。実際、エイリアスを定義するすべてのクラス ライブラリは手動でロードする必要はなく、システムがオンデマンドで自動的にロードします。

    2. システムルールは自動的にロードされます

    エイリアスを定義しない場合、システムは最初に組み込みルールに従ってロードを判断します。システム ルールはビヘイビア クラス、モデル クラス、およびコントローラー クラスに対してのみ適用されます。検索ルールは次のとおりです。
    クラス名 ルール 説明
    行動カテゴリー ルール1 システムクラスライブラリディレクトリの下のBehaviorディレクトリを検索します
    ルール 2 システム拡張ディレクトリの下の Behavior ディレクトリを検索します
    ルール 3 アプリケーションライブラリディレクトリの下でBehaviorディレクトリを検索します
    ルール 4 スキーマ拡張が有効な場合は、スキーマ拡張ディレクトリの下の Behavior ディレクトリを検索します
    モデルクラス ルール1 グループ化が有効な場合は、アプリケーション クラス ライブラリ ディレクトリのモデル/現在のグループ ディレクトリを検索します
    ルール 2 アプリケーションクラスライブラリの下のModelディレクトリを検索します
    ルール 3 システム拡張ディレクトリの下の Model ディレクトリを検索します
    コントローラークラス ルール1 グループ化が有効な場合は、アプリケーション クラス ライブラリ ディレクトリのアクション/現在のグループ ディレクトリを検索します
    ルール 2 プロジェクトのクラスライブラリディレクトリの下にあるアクションディレクトリを検索します
    ルール 3 システム拡張ディレクトリの下のアクションディレクトリを検索します
    注: 検索の優先順位は上から下です。見つかった場合は返され、後続のルールでは検出されなくなります。すべてのルールの検出が完了した後もクラス ライブラリが見つからない場合は、3 番目のカスタム パスの自動読み込み検出が開始されます。

    3. カスタムパスの自動読み込み

    クラス ライブラリが特定のディレクトリに集中しており、あまり多くのエイリアス インポートを定義したくない場合は、カスタム パスの自動読み込み方法を使用できます。この方法では、たとえば、プロジェクト構成ファイルに自動的に読み込まれる検索パスを追加する必要があります。 :
    1. 'APP_AUTOLOAD_PATH' =>'@.Common,@.Tool',
    は、現在のプロジェクトのクラス ライブラリ ディレクトリの Common ディレクトリと Tool ディレクトリにあるクラス ライブラリを自動的にロードできることを意味します。複数の検索パスをカンマで区切って、定義の順序、つまり自動検索の順序に注意してください。
    注: 自動検索パス定義では名前空間メソッドのみを使用できます。つまり、このメソッドはプロジェクト クラス ライブラリ ディレクトリと基本クラス ライブラリ ディレクトリの下にあるクラス ライブラリ ファイルのみを自動的にロードできます。 -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------

    コントローラー:

    1. URLパターン

    従来のファイル エントリ アクセスは、URL パラメータによって均一に解析され、スケジュールされます。 ThinkPHP は、通常モード、PATHINFO、REWRITE、互換モードを含む 4 つの URL モードをサポートしており、URL_MODEL パラメーターを設定することで定義できます。 1. 通常モード: URL_MODEL を 0 に設定します
    従来の URL パラメーター モードを使用します
    1. http://サーバー名/アプリ名/?m=module&a=action&id=1
    2. PATHINFO モード (デフォルト モード): URL_MODEL を 1 に設定します
    PATHINFO モードはデフォルトで使用され、柔軟で使いやすい URL サポートを提供します。 PATHINFO モードは、
      などのモジュールと操作を自動的に識別します。
    1. http://サーバー名/アプリ名/module/action/id/1/または
    1. http://サーバー名/アプリ名/モジュール,アクション,ID,1/
    3. REWRITE モード: URL_MODEL を 2 に設定します
    この URL モードは PATHINFO モードと同じ機能を持ちますが、URL にエントリ ファイルを記述する必要がなく、.htaccess ファイルを定義できる点が異なります。 Apache の URL_REWRITE モジュールを有効にすると、REWRITE モードを有効にすることができます。詳細については、以下の URL 書き換えセクションを参照してください。 4. 互換モード: URL_MODEL を 3 に設定します。 互換モードは、通常モードと PATHINFO モードを組み合わせたもので、テンプレートやプログラムを変更することなく、アプリケーションが直接 PATHINFO モードに切り替えることができます。互換モード URL は、あらゆる動作環境をサポートできます。 互換モードの効果は次のとおりです:
      http://サーバー名/アプリ名/?s=/module/action/id/1/
    1. また、パラメータ分離記号の定義もサポートできます。たとえば、URL_PATHINFO_DEPR が ~ の場合、次の URL が有効です:
      http://サーバー名/アプリ名/?s=module~action~id~1
    実際、VAR_PATHINFO パラメータは、通常モードの実装で PATHINFO モードをシミュレートするために使用されます。ただし、互換モードでは、s 変数を自分で渡す必要はなく、システムが自動的に URL 部分を完成させます。この機能により、テンプレート ファイル内の URL アドレス接続を変更せずに、互換モードと PATHINFO モードを直接切り替えることができます。開発時に PATHINFO モードを使用することをお勧めします。環境がデプロイ時に PATHINFO をサポートしていない場合は、プログラムとテンプレートを変更する必要はありません。
    2. モジュールと操作

    http://ドメイン名/プロジェクト名/グループ名/モジュール名/オペレーション名/その他のパラメータディスパッチャーは、URLに基​​づいて現在のプロジェクト、グループ(定義されている場合)モジュール、オペレーション、および実行する必要があるその他のパラメータを取得します。場合によっては、プロジェクト名が URL アドレスに表示されない場合があります (通常、エントリ ファイルは特定のプロジェクトを表し、エントリ ファイルは非表示にすることができます)。
    各モジュールはコントローラー クラスであり、通常はプロジェクトの LibAction ディレクトリの下にあります。

    バージョン 3.1 以降、操作メソッドのサフィックスを設定するための ACTION_SUFFIX 構成パラメータが追加されました。
    たとえば、次のように設定した場合:
      'ACTION_SUFFIX'=>'行動'
    1. すると、あるモジュールにアクセスするadd操作は、モジュールクラスを読み込む操作メソッドに相当し、本来のaddメソッドからaddActメソッドに変更されます。
    3. コントローラーと空のオペレーション、空のモジュールを定義する

    アプリケーションがデータベースと対話する必要がない場合、モデル クラスを定義する必要はありませんが、アクション コントローラーを定義する必要があります。アクション コントローラーは通常、プロジェクトの Lib/Action ディレクトリの下にあります。

    Action コントローラーの定義は非常に単純で、Action 基本クラスを継承するだけです。例:
    1. クラス UserAction は Action を拡張します{}
    コントローラーファイルの名前はUserAction.class.phpです。
    空の操作とは、システムが指定された操作メソッドを見つけられない場合に、空の操作 (_empty) メソッドを見つけて実行することを意味します。このメカニズムを使用すると、エラー ページと一部の URL の最適化を実現できます。
    空のモジュールの概念は、システムが指定されたモジュール名を見つけられない場合、システムが空のモジュール (EmptyAction) を見つけようとすることを意味し、このメカニズムを使用してエラー ページをカスタマイズし、URL を最適化できます。

    4. モジュールのグループ化

    モジュールのグループ化に関連する構成パラメータには次のものがあります。
    設定パラメータ 説明
    APP_GROUP_LIST プロジェクトのグループ化リスト (構成とはグループ化を有効にすることを意味します)
    デフォルト_グループ デフォルトのグループ化 (デフォルト値はホーム)
    TMPL_FILE_DEPR グループテンプレート内のモジュールとオペレーションの区切り文字、デフォルト値は「/」です
    VAR_グループ グループ化された URL パラメータ名、デフォルトは g (通常モードの URL にのみ必要)
    たとえば、現在のプロジェクトを 2 つのグループ (それぞれフロントエンド機能とバックエンド機能を表すホームと管理者) に分割する場合、プロジェクト構成に次の構成を追加するだけで済みます。
      'APP_GROUP_LIST' => 'Home,Admin', //プロジェクトグループ設定
    1. 'DEFAULT_GROUP' => 'ホーム', //デフォルトグループ
    2. 複数のグループはカンマで区切ることができます。デフォルトでは 1 つのグループのみを設定できます。
    5. URL 擬似静的

    ThinkPHP は、現在の操作の通常の実行に影響を与えることなく、URL_HTML_SUFFIX パラメーターを設定することによって、URL の末尾に必要な静的サフィックスを追加できます。たとえば、

    を設定します
      'URL_HTML_SUFFIX'=>'shtml'
    1. その場合は、次のURLを貼ってください
      http://サーバー名/ブログ/read/id/1
    1. になります
      http://サーバー名/ブログ/read/id/1.shtml
    1. 後者は静的ページの URL 特性をより多く持っていますが、前の URL と同じ実行効果があり、元のパラメータの使用には影響しません。
    注: 擬似静的サフィックスを設定するときに、サフィックスに「.」を含める必要はありません。したがって、次の構成は実際には同等です:
      'URL_HTML_SUFFIX'=>'.shtml'
    1. 疑似静的設定後、一貫した URL を動的に生成する必要がある場合は、U メソッドを使用してテンプレート ファイルに URL を生成できます。 バージョン 3.1 以降、デフォルトですべての静的サフィックスがサポートされ、現在の疑似静的サフィックスが定数 __EXT__ に記録されますが、通常のページ アクセスには影響しません。現在の擬似静的サフィックスを取得したい場合は、定数
    __EXT__ を介して取得するだけです。 設定された擬似静的サフィックスをサポートしたいだけの場合は、複数のサフィックスをサポートするように直接設定できます。例:
      'URL_HTML_SUFFIX'=>'html|shmtl|xml' // 複数の分割
    複数の擬似静的サフィックスが設定されている場合、U 関数を使用して生成される URL アドレスでは最初のサフィックスがデフォルトで使用されます。また、URL アドレスを生成するためのサフィックスの指定もサポートされています。
    6. URL ルーティング

    ThinkPHP は URL ルーティング機能をサポートしています。ルーティング機能を有効にするには、URL_ROUTER_ON パラメーターを true に設定する必要があります。ルーティング機能を有効にし、URL_ROUTE_RULES パラメーターを構成すると、現在の URL に一致するルート名がルート定義内で見つかった場合、システムはルートの解析とリダイレクトを実行します。
    詳細については、こちらをご覧ください: http://doc.thinkphp.cn/manual/url_route.html 7. URL書き換え

    詳細については、こちらをご覧ください: http://doc.thinkphp.cn/manual/url_rewrite.html<code><code><code><code><code><code><code><code><code><code><code><code>

    8. URLの生成

    <code><code><code><code><code><code><code><code><code><code><code><code>为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响。
    U方法的定义规则如下(方括号内参数根据实际应用决定):<code>
    1. U('[グループ/モジュール/オペレーション]?パラメータ' [,'パラメータ','擬似静的サフィックス','ジャンプするかどうか','表示ドメイン名'])
    <code><code><code><code><code><code><code><code><code><code><code><code><code>如果不定义项目和模块的话 就表示当前项目和模块名称,下面是一些简单的例子:<code>
    1. U('User/add') // Userモジュールの追加操作のURLアドレスを生成します
    2. U('Blog/read?id=1') // ブログモジュールの読み取り操作とID 1のURLアドレスを生成します
    3. U('Admin/User/select') // AdminグループのUserモジュールのselectオペレーションのURLアドレスを生成します
    <code><code><code><code><code><code><code><code><code><code><code><code><code>U方法的第二个参数支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,例如:<code>
    1. U('ブログ/cate',array('cate_id'=>1,'status'=>1))
    2. U('ブログ/カテゴリー','cate_id=1&status=1')
    3. U('ブログ/cate?cate_id=1&status=1')
    <code><code><code><code><code><code><code><code><code><code><code><code><code>三种方式是等效的,都是 生成Blog模块的cate操作 并且cate_id为1 status为1的URL地址
    但是不允许使用下面的定义方式来传参数<code>
    1. U('ブログ/cate/cate_id/1/status/1')
    <code><code><code><code><code><code><code><code><code><code><code><code> プロジェクトの異なる URL 設定に従って、同じ U メソッド呼び出しで、
      などの異なる URL アドレス効果をインテリジェントに生成できます。
    1. U('Blog/read?id=1') は例です。
    現在の URL が通常モードに設定されている場合、最後に生成された URL アドレスは次のとおりです:
    http://serverName/index.php?m=Blog&a=read&id=1
    現在の URL が PATHINFO モードに設定されている場合、同じ方法最終的に生成される URL アドレスは次のとおりです:
    http://serverName/index.php/Blog/read/id/1
    現在の URL が REWRITE モードに設定されている場合、同じ方法で生成される最終的な URL アドレスは次のとおりです:
    http ://serverName/ Blog/read/id/1
    現在の URL が REWRITE モードに設定され、擬似静的サフィックスが .html に設定されている場合、同じメソッドで生成される最終的な URL アドレスは次のようになります:
    http: //serverName/Blog/read/id/ 1.html
    U メソッドは、ルーティング ルールを次のように定義する場合、ルーティングもサポートできます:
    1. 'news/:idd'=>'ニュース/読む'
    それでは、ご利用いただけます
    1. う('/news/1')
    最終的に生成される URL アドレスは次のとおりです:
    1. http://サーバー名/index.php/news/1

    注: テンプレート ファイル内で U メソッドを直接使用する場合は、{:U('パラメータ 1', 'パラメータ 2'...)} を使用する必要があります。詳細については、「8.3 テンプレート エンジンでの関数の使用」を参照してください。章。

    アプリケーションに複数のサブドメインの操作アドレスが含まれる場合は、U メソッドでアドレスを生成する必要があるドメイン名を指定することもできます。例: <code>

    1. U('ブログ/read@blog.thinkphp.cn','id=1');

    <code>@ 指定する必要があるドメイン名を渡すだけです。

    さらに、U メソッドの 5 番目のパラメーターが true に設定されている場合、現在のドメイン名が自動的に認識され、現在のアドレスのサブドメイン名がサブドメイン名の展開設定 APP_SUB_DOMAIN_DEPLOY および APP_SUB_DOMAIN_RULES に基づいて自動的に生成されることを意味します。 。
    URL_CASE_INSENSITIVE がオンになっている場合、小文字の URL アドレスが均一に生成されます。

    9. URLケース

    プロジェクト構成に <code> を追加するだけです

    1. 'URL_CASE_INSENSITIVE' =>true

    <code>URL アクセスで大文字と小文字が区別されなくなっていることがわかります。

    ここで注意すべき点は、UserTypeAction のモジュール クラスを定義する場合、URL アクセスは次のようにする必要があるということです: <code>

    1. http://サーバー名/index.php/user_type/list
    2. //
    3. の代わりに
    4. http://サーバー名/index.php/usertype/list

    <code>利用系统提供的U方法可以为你自动生成相关的URL地址。
    如果设置<code>システムが提供する U メソッドを使用して、関連する URL アドレスを自動的に生成します。
    設定されている場合

    1. 'URL_CASE_INSENSITIVE' =>false

    <code>的话,URL就又变成:<code>

    の場合、URLは次のようになります:
    http://サーバー名/index.php/ユーザータイプ/list

    <code>

    注: URL の大文字と小文字の区別はシステムの命名規則を変更しません。システムの命名規則に従うことによってのみ、URL の大文字と小文字の区別を正しく実装できます。

    <code>10. 手術前と手術後

    システムは、現在の操作に前操作と後操作があるかどうかを検出し、それらが存在する場合は、前操作と後操作のメソッド名をメソッドの前に追加します。実行されます。例:

    🎜 🎜
    1. クラス CityAction は Action{
    2. を拡張します
    3. //事前操作方法
    4. パブリック関数 _before_index(){
    5. echo 'before
      ';
    6. }
    7. パブリック関数index(){
    8. echo 'index
      ';
    9. }
    10. //操作後のメソッド
    11. パブリック関数 _after_index(){
    12. echo 'after
      ';
    13. }
    14. }
    どのような操作メソッドでも、このようなルールに従って事前メソッドと事後メソッドを定義できます。
    <code><code><code><code><code><code><code><code><code><code><code><code> 現在の操作で操作メソッドが定義されていないが、テンプレート ファイルを直接レンダリングする場合でも、事前メソッドと事後メソッドが定義されていれば、その操作は引き続き有効になります。実際のテンプレート出力は現在の操作のみであり、通常、前操作と後操作には出力がありません。
    一部のメソッドで終了またはエラー出力が使用されている場合、ポストメソッドが実行されなくなる可能性があることに注意してください。
    たとえば、システム アクションのエラー メソッドが現在のオペレーションで呼び出された場合、ポスト オペレーションは実行されませんが、成功メソッドのポスト メソッドの実行は影響を受けません。
    <code><code><code><code><code><code><code><code><code><code><code><code> <code><code>

    11. モジュール間通話

    <code><code><code><code>例如,我们在Index模块调用User模块的操作方法<code>例えば、Indexモジュール内でUserモジュールの操作メソッドを呼び出します
  • クラス IndexAction は Action{
  • を拡張します
  • パブリック関数index(){
  • // UserAction をインスタンス化する
  • $User = new UserAction();
  • //その他のユーザー操作
  • //...
  • $this->display() //出力ページテンプレート
  • }
  • }<code><code>
    システムはアクション コントローラーを自動的にロードするため、UserAction クラスをインポートせずに直接インスタンス化できます。 そして、モジュール間の呼び出しを容易にするために、システムには A メソッドと R メソッドが組み込まれています。
    $User = A('User');
    <code><code><code>事实上,A方法还支持跨分组或者跨项目调用,默认情况下是调用当前项目下面的模块。
    跨项目调用的格式是:
    A('[项目名://][分组名/]模块名')
    例如:<code>
      <code><code>
    1. 実際、メソッド A はグループ間またはプロジェクト間の呼び出しもサポートしており、デフォルトでは、現在のプロジェクトの下にあるモジュールが呼び出されます。
    2. プロジェクト間の呼び出しの形式は次のとおりです:
    3. A('[プロジェクト名://][グループ名/]モジュール名')
    4. 例:
    <code><code>A('User') //現在のプロジェクトの User モジュールの呼び出しを示します
    A('Admin://User') //Admin プロジェクトの User モジュールの呼び出しを示します
    A('Admin/User') //Admin グループを呼び出す User モジュールを表します🎜 🎜A('Admin://Tool/User') //管理プロジェクトのツールグループを呼び出すユーザーモジュールを表します🎜 🎜🎜 R メソッドは、モジュールの操作メソッドの呼び出しを表します。呼び出し形式は、 🎜🎜R('[プロジェクト名://][グループ名/]モジュール名/操作名',array('パラメーター 1','パラメーター) です。 2分…))🎜🎜例:
    1. R('User/info') //現在のプロジェクトの User モジュールの info 操作メソッドの呼び出しを示します
    2. R('Admin/User/info') //AdminグループのUserモジュールのinfo操作メソッドの呼び出しを示します
    3. R('Admin://Tool/User/info') //AdminプロジェクトのToolグループのUserモジュールのinfo操作メソッドの呼び出しを示します
    R メソッドは、呼び出される操作メソッドのパラメーターを渡す必要性もサポートしています。たとえば、User モジュールで info メソッドを定義します。
      クラス UserAction は Action{
    1. を拡張します
    2. 保護された関数情報($id){
    3. $User = M('User');
    4. $User->find($id);
    5. //...
    6. }
    7. }
    8. 次に、他のモジュールを呼び出すことができます:
      R('ユーザー/情報',array(15))
    1. 現在のプロジェクトの User モジュールの info 操作メソッドが呼び出され、id パラメータが 15 に渡されることを示します
    <code>コード>コード> <code><code><code>12. ページジャンプ

    <code><code><code>システムの Action クラスには、success と error という 2 つの組み込みジャンプ メソッドがあり、ページ ジャンプ プロンプトに使用され、ajax 送信をサポートできます。使用方法は非常に簡単です。例:

    <code><code><code>系统的Action类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交。使用方法很简单,举例如下:<code>
      $User = M('User') //User オブジェクトをインスタンス化します
    1. $result = $User->add($data);
    2. if($result){
    3. //設定が成功した後にジャンプするページのアドレスを設定します。デフォルトの戻りページは $_SERVER['HTTP_REFERER'] です。
    4. $this->success('追加に成功しました', 'ユーザー/リスト');
    5. } 他 {
    6. //エラーページのデフォルトのジャンプページは前のページに戻ります。通常は設定する必要はありません
    7. $this->error('追加に失敗しました');
    8. }
    9. 成功メソッドとエラーメソッドには対応するテンプレートがあり、設定可能です。デフォルト設定では、両方のメソッドに対応するテンプレートは次のとおりです。
    10. //デフォルトのエラージャンプに対応するテンプレートファイル
    <code><code><code>'TMPL_ACTION_ERROR' => 'Tpl/dispatch_jump.tpl';
    1. //対応するテンプレート ファイルはデフォルトで正常にジャンプされます
    2. 'TMPL_ACTION_SUCCESS' => 'Tpl/dispatch_jump.tpl';
    3. プロジェクト内でテンプレートファイルを使用することもできます
    4. //デフォルトのエラージャンプに対応するテンプレートファイル
    'TMPL_ACTION_ERROR' => 'パブリック: エラー';
    1. //対応するテンプレート ファイルはデフォルトで正常にジャンプされます
    2. 'TMPL_ACTION_SUCCESS' => 'パブリック:成功';
    3. テンプレート ファイルではテンプレート タグを使用でき、次のテンプレート変数を使用できます。
    $msgタイトルアクションのタイトルページプロンプト情報操作ステータス 1 は成功を意味し、0 は失敗を意味します。プロジェクト自体によって特定のルールを定義することもできます。 $waitSecondジャンプ待ち時間を秒単位で表示$ジャンプURLジャンプページアドレスsuccess メソッドと error メソッドは、現在のリクエストが Ajax リクエストであるかどうかを自動的に判断します。Ajax リクエストの場合、ajaxReturn メソッドが呼び出されて情報が返されます。詳細については、後の「AJAX リターン」セクションを参照してください。 <code><code><code> バージョン 3.1 以降、error メソッドと success メソッドは値の受け渡しをサポートしており、jump テンプレート メソッドでも ajax メソッドでも、assign メソッドを使用してパラメータを渡すことができます。例:
    1. $this->assign('var1','value1');
    2. $this->assign('var2','value2');
    3. $this->error('パラメータが間違っています','ジャンプするURLアドレス');
    通常の方法で送信すると、var1 変数と var2 変数がエラー テンプレートのテンプレート変数に割り当てられます。
    AJAX 経由で送信する場合、ajaxReturn メソッドが自動的に呼び出され、値 (ジャンプ URL アドレス url とステータス値 status を含む) が渡されます。 <code><code><code>

    13. リダイレクト

    Actionクラスのredirectメソッドでページリダイレクト機能を実装できます。
    リダイレクト メソッドのパラメーターの使用法は、U 関数の使用法と一致しています (上記の URL 生成部分を参照)。例:
    1. //新しいモジュールのカテゴリ操作にリダイレクトします
    2. $this->redirect('New/category', array('cate_id' => 2), 5, 'ページジャンプ...');
    上記の使用法は、5秒滞在後にニュースモジュールのカテゴリー操作にジャンプし、リダイレクト後に単語ページを表示するものです。
    特定のモジュールの操作メソッドではなく、指定した URL アドレスにリダイレクトしたいだけの場合は、次のようにリダイレクト メソッドを直接使用してリダイレクトできます。
      //指定された URL アドレスにリダイレクトします
    1. リダイレクト('/N
    $メッセージ
    $ステータス
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!