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 | システムテンプレートディレクトリ |
延長 | フレームワーク拡張ディレクトリ (拡張ディレクトリの詳細については、後述の拡張機能の章を参照してください) |
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 ヘッダー情報を削除するにはさまざまな方法がありますが、それぞれに異なります)エディタなどの設定方法があり、一元的に検出・処理するツールを使用することもできます)、そうしないと予期せぬ問題が発生する可能性があります。
- システム設計、データベースとデータテーブルの作成(オプション)
- プロジェクトに名前を付けてプロジェクトエントリファイルを作成し、デバッグモードをオンにします。 プロジェクト構成を完了する;
- プロジェクト関数ライブラリを作成する(オプション)
- 開発プロジェクトに必要な拡張機能(モード、ドライバー、タグライブラリなど)(オプション)
- コントローラークラスを作成する;
- モデルクラスを作成する(オプション)
- テンプレートファイルを作成する;
- 実行とデバッグ、ログの分析;
- キャッシュ機能を開発および設定する(オプション)
- ルーティングサポートを追加します(オプション)
- セキュリティチェック(オプション)
- 実稼働環境にデプロイします。
- デバッグモードと実行モードに関連する定数を定義します(オプション)
- フレームワークエントリーファイルをロードします(必須)
- //プロジェクト名を定義します
- define('APP_NAME', 'App');
- //プロジェクトパスを定義します
- define('APP_PATH', './App/');
- //フレームをファイルにロードします
- './App/ThinkPHP/ThinkPHP.php' が必要です;
- define('RUNTIME_PATH','./App/temp/');
- define('RUNTIME_FILE','./App/temp/runtime_cache.php');
- 配列を返す(
- 'DEFAULT_MODULE' => 'インデックス', //デフォルトモジュール
- 'URL_MODEL' => '2', //URL モード
- 'SESSION_AUTO_START' => true, //セッションを開くかどうか
- //その他の設定パラメータ
- //...
- );
- 配列を返す(
- 'DEFAULT_MODULE' => 'インデックス', //デフォルトモジュール
- 'URL_MODEL' => '2', //URL モード
- 'SESSION_AUTO_START' => true, //セッションを開くかどうか
- 'USER_CONFIG' =>
- 'USER_AUTH' => 「USER_TYPE」=> 2,
- )、
- //その他の設定パラメータ
- //...
- );
- 二次パラメータの設定では大文字と小文字が区別されることに注意してください。これは、読み取り値が定義と一致している必要があることを意味します。
- 9. 従来の構成、プロジェクト構成、デバッグ構成 設定よりも規約を重視することは、システムが従う重要な考え方です。システムには、ほとんどの用途に応じてデフォルトで共通パラメータを設定する組み込みの規約設定ファイル (システム ディレクトリにある Confconvention.php) があります。 プロジェクト構成ファイルは、最も一般的に使用される構成ファイルであり、プロジェクトの構成ファイル ディレクトリ Conf の下にあり、ファイル名は config.php です。
- テストステータスなど、デバッグモードでアプリケーションのステータスを追加したい場合は、プロジェクト構成ファイルの設定を次のように変更できます:
- デバッグ モードにはキャッシュがないため、より多くのファイル IO 操作とテンプレートのリアルタイム コンパイルが必要となるため、デバッグ モードをオンにするとパフォーマンスがある程度低下しますが、パフォーマンスには影響しません。展開モードの。 注: デバッグ モードをオフにすると、プロジェクトのデバッグ構成ファイルはすぐに無効になります。
- Home と Admin の 2 つのグループが定義されたので、次のようにグループ構成ファイルを定義できます: Conf/Home/config.php
- Conf/Admin/config.php 各グループの構成ファイルは、現在のグループの定義形式はプロジェクトの構成と同じです。
- C('パラメータ名')//設定されているパラメータ値を取得します
- C('USER_CONFIG.USER_TYPE')//ユーザー構成内のユーザータイプ設定を取得します
- C('パラメータ名','新しいパラメータ値');
- C('DATA_CACHE_TIME','60');
- C('USER_CONFIG.USER_TYPE');
- C('USER_CONFIG.USER_TYPE','1');
- C($array,'name');
- C('','name') //または C(null,'name');
- 'LOAD_EXT_CONFIG' => 'user,db', // 拡張設定ファイルをロードします
- 'LOAD_EXT_CONFIG' => 'USER' => 'user', //ユーザー設定
- 'DB' => 'db', //データベース設定
- ), //拡張設定ファイルをロードします
- user.php 設定ファイルの内容は同じですが、ユーザーパラメータを取得する最終的な方法は次のようになります:
- この方法により、大規模なプロジェクトの状況でのパラメーターの競合の問題を回避できます。 次の構成ファイルの一部はシステムによってすでに使用されているため、カスタム拡張構成として再定義しないでください。
- "LOAD_EXT_FILE"=>"ユーザー,データベース"
- @.user は、現在のプロジェクトのユーザー関数ファイルをロードすることを意味し、user.php 関数ライブラリ内の関数を直接拡張できます。
- import("Think.Util.Session");
- import("App.Model.UserModel");
- import("Think.Util.Session");
- import("ORG.Util.Page");
- import("MyApp.Model.InfoModel");
- 上記のメソッドはそれぞれ、MyApp プロジェクトの下に Lib/Action/UserAction.class.php クラス ファイルと Lib/Model/InfoModel.class.php クラス ファイルをインポートすることを表します。 通常、必要なクラス ライブラリ ファイルを現在のプロジェクトにインポートするため、次のメソッドを使用してコードを簡素化できます
- import("@.Model.InfoModel");
- 'rbac' =>LIB_PATH.'Common/Rbac.class.php',
- 'page' =>LIB_PATH.'Common/Page.class.php',
- );
- これで、今すぐ直接使用できます:
- import("ページ");
- Rbac クラスと Page クラスのインポート。エイリアス インポート メソッドは、インポート メソッドの 2 番目と 3 番目のパラメーターの使用を禁止します。欠点は、関連するエイリアスを名前空間インポート メソッドで定義する必要があることです。前進。
- Dir クラス ライブラリをインポートできます。
- 'APP_AUTOLOAD_PATH' =>'@.Common,@.Tool',
- http://サーバー名/アプリ名/?m=module&a=action&id=1
- http://サーバー名/アプリ名/module/action/id/1/または
- http://サーバー名/アプリ名/モジュール,アクション,ID,1/
- また、パラメータ分離記号の定義もサポートできます。たとえば、URL_PATHINFO_DEPR が ~ の場合、次の URL が有効です:
- すると、あるモジュールにアクセスするadd操作は、モジュールクラスを読み込む操作メソッドに相当し、本来のaddメソッドからaddActメソッドに変更されます。
- クラス UserAction は Action を拡張します{}
- 'DEFAULT_GROUP' => 'ホーム', //デフォルトグループ
- 複数のグループはカンマで区切ることができます。デフォルトでは 1 つのグループのみを設定できます。
- その場合は、次のURLを貼ってください
- になります
- 後者は静的ページの URL 特性をより多く持っていますが、前の URL と同じ実行効果があり、元のパラメータの使用には影響しません。
- 疑似静的設定後、一貫した URL を動的に生成する必要がある場合は、U メソッドを使用してテンプレート ファイルに URL を生成できます。 バージョン 3.1 以降、デフォルトですべての静的サフィックスがサポートされ、現在の疑似静的サフィックスが定数 __EXT__ に記録されますが、通常のページ アクセスには影響しません。現在の擬似静的サフィックスを取得したい場合は、定数
- U('[グループ/モジュール/オペレーション]?パラメータ' [,'パラメータ','擬似静的サフィックス','ジャンプするかどうか','表示ドメイン名'])
- U('User/add') // Userモジュールの追加操作のURLアドレスを生成します
- U('Blog/read?id=1') // ブログモジュールの読み取り操作とID 1のURLアドレスを生成します
- U('Admin/User/select') // AdminグループのUserモジュールのselectオペレーションのURLアドレスを生成します
- U('ブログ/cate',array('cate_id'=>1,'status'=>1))
- U('ブログ/カテゴリー','cate_id=1&status=1')
- U('ブログ/cate?cate_id=1&status=1')
- U('ブログ/cate/cate_id/1/status/1')
- U('Blog/read?id=1') は例です。
- 'news/:idd'=>'ニュース/読む'
- う('/news/1')
- http://サーバー名/index.php/news/1
- U('ブログ/read@blog.thinkphp.cn','id=1');
- 'URL_CASE_INSENSITIVE' =>true
- http://サーバー名/index.php/user_type/list
- // の代わりに
- http://サーバー名/index.php/usertype/list
- 'URL_CASE_INSENSITIVE' =>false
- クラス CityAction は Action{ を拡張します
- //事前操作方法
- パブリック関数 _before_index(){
- echo 'before
'; - }
- パブリック関数index(){
- echo 'index
'; - }
- //操作後のメソッド
- パブリック関数 _after_index(){
- echo 'after
'; - }
- }
- クラス IndexAction は Action{ を拡張します
- パブリック関数index(){
- // UserAction をインスタンス化する
- $User = new UserAction();
- //その他のユーザー操作
- //...
- $this->display() //出力ページテンプレート
- } }<code><code>
- 実際、メソッド A はグループ間またはプロジェクト間の呼び出しもサポートしており、デフォルトでは、現在のプロジェクトの下にあるモジュールが呼び出されます。 プロジェクト間の呼び出しの形式は次のとおりです:
- A('[プロジェクト名://][グループ名/]モジュール名')
- 例:
- R('User/info') //現在のプロジェクトの User モジュールの info 操作メソッドの呼び出しを示します
- R('Admin/User/info') //AdminグループのUserモジュールのinfo操作メソッドの呼び出しを示します
- R('Admin://Tool/User/info') //AdminプロジェクトのToolグループのUserモジュールのinfo操作メソッドの呼び出しを示します
- を拡張します 保護された関数情報($id){
- $User = M('User');
- $User->find($id);
- //...
- }
- }
- 次に、他のモジュールを呼び出すことができます:
- 現在のプロジェクトの User モジュールの info 操作メソッドが呼び出され、id パラメータが 15 に渡されることを示します
- $result = $User->add($data);
- if($result){
- //設定が成功した後にジャンプするページのアドレスを設定します。デフォルトの戻りページは $_SERVER['HTTP_REFERER'] です。 $this->success('追加に成功しました', 'ユーザー/リスト');
- } 他 {
- //エラーページのデフォルトのジャンプページは前のページに戻ります。通常は設定する必要はありません
- $this->error('追加に失敗しました');
- }
- 成功メソッドとエラーメソッドには対応するテンプレートがあり、設定可能です。デフォルト設定では、両方のメソッドに対応するテンプレートは次のとおりです。 //デフォルトのエラージャンプに対応するテンプレートファイル
- //対応するテンプレート ファイルはデフォルトで正常にジャンプされます
- 'TMPL_ACTION_SUCCESS' => 'Tpl/dispatch_jump.tpl';
- プロジェクト内でテンプレートファイルを使用することもできます
- //デフォルトのエラージャンプに対応するテンプレートファイル
- //対応するテンプレート ファイルはデフォルトで正常にジャンプされます
- 'TMPL_ACTION_SUCCESS' => 'パブリック:成功';
- テンプレート ファイルではテンプレート タグを使用でき、次のテンプレート変数を使用できます。
- $this->assign('var1','value1');
- $this->assign('var2','value2');
- $this->error('パラメータが間違っています','ジャンプするURLアドレス');
- //新しいモジュールのカテゴリ操作にリダイレクトします
- $this->redirect('New/category', array('cate_id' => 2), 5, 'ページジャンプ...');
- リダイレクト('/N
4. CBD アーキテクチャ
ThinkPHP バージョン 3.0 では、新しい CBD (コア + ビヘイビア + ドライバー) アーキテクチャ モデルが導入されています。これは、フレームワークがコア + ビヘイビア + ドライバー アーキテクチャ システムを採用しているため、コアは最も重要な部分を保持し、重要な位置に設定されています。はマーキングに使用され、他の機能は動作拡張機能とドライバーを使用して結合されます。開発者は、独自のニーズに応じて特定のタグ位置の動作を拡張または置き換えることができ、フレームワークの最下層またはアプリケーション層を簡単にカスタマイズできます。独自のラベル位置を追加し、適用行を追加します。ラベルの位置は、AOP 概念の「アスペクト」に似ており、システムの組み込みコア拡張機能が標準モードとみなされる場合、ユーザーはこれらの動作をすべてカスタマイズできます。実際、パターン拡張は動作を置き換えたり追加したりするだけでなく、基礎となる MVC を置き換えたり変更したりして、カスタマイズされた目的を達成することもできます。この新機能を使用すると、開発者はパターン拡張機能を通じて自分自身または自社の開発フレームワークを簡単にカスタマイズできます。パターン拡張機能の新しいバージョンは、フレームワーク拡張機能のマスターであり、新しいマイルストーンを作成します。これがまさに新しいバージョンの本当の美しさです。 。5.開発プロセス
ThinkPHP を使用してアプリケーションを作成する一般的な開発プロセスは次のとおりです。ThinkPHP は、プロジェクトのデプロイメントとアクセスに単一入口モードを採用しており、どの機能が完了しても、プロジェクトには統一された (ただし、唯一であるとは限りません) 入口があります。すべてのプロジェクトはエントリ ファイルから始まり、すべてのプロジェクトのエントリ ファイルには主に次のものが含まれます。
- フレームワークパス、プロジェクトパス、プロジェクト名を定義します(オプション)
生成されたプロジェクト ディレクトリ構造は、システム ディレクトリに似ており、次のものが含まれます。
説明 | ||
---|---|---|
プロジェクトのパブリック ファイル ディレクトリ。通常はプロジェクトのパブリック機能が配置されます | ||
プロジェクト構成ディレクトリ。すべてのプロジェクト構成ファイルはここに配置されます | ||
プロジェクト言語パックのディレクトリ (オプション、多言語サポートが必要ない場合は削除できます) | ||
プロジェクト クラス ライブラリ ディレクトリ (通常はアクションとモデルのサブディレクトリが含まれます) | ||
プロジェクトテンプレートディレクトリ、テンプレートテーマをサポート | ||
プロジェクトのランタイム ディレクトリには、Cache (テンプレート キャッシュ)、Temp (データ キャッシュ)、Data (データ ディレクトリ)、および Logs (ログ ファイル) のサブディレクトリが含まれます。グループがある場合は、グループ ディレクトリが最初になります。 |
ディレクトリ/ファイル | 説明 |
---|---|
PHP について考える | システムディレクトリ(以下のディレクトリ構造は上記のシステムディレクトリと同じです) |
公開 | ウェブサイトのパブリックリソースディレクトリ (ウェブサイトの Css、Js、写真、その他のリソースを保存) |
アップロード | Webサイトアップロードディレクトリ(ユーザーがアップロードする統合ディレクトリ) |
ホーム | プロジェクトディレクトリ(以下のディレクトリ構成は上記のアプリケーションディレクトリと同じです) |
管理者 | バックエンド管理プロジェクトディレクトリ |
…その他のプロジェクト ディレクトリ | |
index.php | プロジェクトホームのエントリーファイル |
管理者.php | プロジェクト管理者のエントリファイル |
...その他のプロジェクト エントリ ファイル |
実際、システム ディレクトリとプロジェクト ディレクトリは非 WEB アクセス ディレクトリの下に配置でき、Web サイト ディレクトリの下にはパブリック ディレクトリとエントリ ファイルのみを配置する必要があるため、Web サイトのセキュリティが向上します。
ディレクトリを自分で設定したい場合は、エントリ ファイルの RUNTIME_PATH 定数を変更できます。例:
コンパイル キャッシュ ディレクトリのカスタマイズに加えて、コンパイル キャッシュ ファイル名のカスタマイズもサポートされています。例:
- //プロジェクト構成ファイル
構成ファイルで 2 次元配列を使用して、さらに多くの情報を構成することもできます。例:
- //プロジェクト構成ファイル
'APP_STATUS' => 'debug', //アプリケーションのデバッグモードのステータス
-
debug.php 構成ファイルでは、プロジェクト構成ファイルおよびシステム デバッグ構成ファイルから別のパラメーターまたは新しいパラメーターを構成するだけで済みます。
10. グループ設定と読み取り設定、動的設定
モジュールのグループ化が有効な場合、各グループの構成ファイルを個別に定義できます。グループ化構成ファイルは次の場所にあります。プロジェクト構成ディレクトリ/グループ名/config.php
次の構成を通じてグループ化を有効にできます。
'APP_GROUP_LIST' => 'Home,Admin', //プロジェクトグループ設定'DEFAULT_GROUP' => 'ホーム', //デフォルトグループ
新しい値を設定します:
設定されているパラメーター値を取得します:
キャッシュされた設定リスト データを取得する
- を使用できます。
11. 拡張構成
プロジェクト構成ファイルは、デプロイメント・モード中にコンパイル・キャッシュに組み込まれます。つまり、コンパイル後のプロジェクト構成ファイルの変更は、すぐには有効になりません。有効にする前に、コンパイル・キャッシュを削除する必要があります。拡張設定ファイルはこの制限の影響を受けません。展開モードでも、変更された設定はリアルタイムで有効になり、設定形式はプロジェクト設定と同じになります。拡張機能の構成を設定する方法は次のとおりです(複数のファイルをカンマで区切ります):
- C('USER.USER_AUTH_ID');
説明 | ||
---|---|---|
プロジェクト設定ファイル | ||
プロジェクトの行動プロファイル | ||
プロジェクトエイリアス定義ファイル | ||
プロジェクトデバッグモード設定ファイル(およびプロジェクトによって設定されたAPP_STATUSに対応する設定ファイル) | ||
コア コンパイル リスト ファイルがプロジェクトに追加されます (コア コンパイル リストは上書きされません) |
ルール | 例 | |
---|---|---|
モジュール名+アクション | 例: 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メソッドを使用してテンプレート内で呼び出す | ウィジェットクラスライブラリパッケージを適用する |
クラスライブラリのインポート
1. 明示的なインポート
ThinkPHP は Java のクラス ライブラリのインポート メカニズムをシミュレートし、インポート メソッドを均一に使用してクラス ファイルをロードします。インポート メソッドは、ThinkPHP の組み込みクラス ライブラリ インポート メソッドであり、便利で柔軟なファイル インポート メカニズムを提供し、PHP の require メソッドと include メソッドを完全に置き換えることができます。例:プロジェクトのアプリケーション クラス ライブラリ ファイルをインポートするのも非常に簡単で、基本クラス ライブラリをインポートする方法と似た次の方法を使用するだけです。
- import("MyApp.Action.UserAction");
- import("@.Action.UserAction");
名前空間インポート メソッドに加えて、インポート メソッドでもエイリアス インポートをサポートできます。エイリアス インポートを使用するには、まずプロジェクト構成ディレクトリにエイリアスを追加して、必要なクラス ライブラリ エイリアスを定義する必要があります。たとえば、プロジェクトで使用されます:
- 配列を返す(
- import("rbac");
サードパーティのクラス ライブラリは、システム拡張ディレクトリの下の Vendor ディレクトリに一律に配置され、ベンダー メソッドを使用してインポートされます。ただし、パラメータはデフォルト値が変更されている点を除き、インポート メソッドと同じです。たとえば、Vendor ディレクトリの下に Zend の FilterDir.php を配置します。このとき、Dir ファイルのパスは次のようになります。 VendorZendFilterDir.php では、ベンダー メソッドを使用してインポートして使用します:
- ベンダー('Zend.Filter.Dir');
- 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. カスタムパスの自動読み込み
クラス ライブラリが特定のディレクトリに集中しており、あまり多くのエイリアス インポートを定義したくない場合は、カスタム パスの自動読み込み方法を使用できます。この方法では、たとえば、プロジェクト構成ファイルに自動的に読み込まれる検索パスを追加する必要があります。 :注: 自動検索パス定義では名前空間メソッドのみを使用できます。つまり、このメソッドはプロジェクト クラス ライブラリ ディレクトリと基本クラス ライブラリ ディレクトリの下にあるクラス ライブラリ ファイルのみを自動的にロードできます。 -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------
コントローラー:
1. URLパターン
従来のファイル エントリ アクセスは、URL パラメータによって均一に解析され、スケジュールされます。 ThinkPHP は、通常モード、PATHINFO、REWRITE、互換モードを含む 4 つの URL モードをサポートしており、URL_MODEL パラメーターを設定することで定義できます。 1. 通常モード: URL_MODEL を 0 に設定します従来の URL パラメーター モードを使用します
PATHINFO モードはデフォルトで使用され、柔軟で使いやすい URL サポートを提供します。 PATHINFO モードは、
- などのモジュールと操作を自動的に識別します。
この URL モードは PATHINFO モードと同じ機能を持ちますが、URL にエントリ ファイルを記述する必要がなく、.htaccess ファイルを定義できる点が異なります。 Apache の URL_REWRITE モジュールを有効にすると、REWRITE モードを有効にすることができます。詳細については、以下の URL 書き換えセクションを参照してください。 4. 互換モード: URL_MODEL を 3 に設定します。 互換モードは、通常モードと PATHINFO モードを組み合わせたもので、テンプレートやプログラムを変更することなく、アプリケーションが直接 PATHINFO モードに切り替えることができます。互換モード URL は、あらゆる動作環境をサポートできます。 互換モードの効果は次のとおりです:
- http://サーバー名/アプリ名/?s=/module/action/id/1/
- http://サーバー名/アプリ名/?s=module~action~id~1
2. モジュールと操作
http://ドメイン名/プロジェクト名/グループ名/モジュール名/オペレーション名/その他のパラメータディスパッチャーは、URLに基づいて現在のプロジェクト、グループ(定義されている場合)モジュール、オペレーション、および実行する必要があるその他のパラメータを取得します。場合によっては、プロジェクト名が URL アドレスに表示されない場合があります (通常、エントリ ファイルは特定のプロジェクトを表し、エントリ ファイルは非表示にすることができます)。
各モジュールはコントローラー クラスであり、通常はプロジェクトの LibAction ディレクトリの下にあります。
バージョン 3.1 以降、操作メソッドのサフィックスを設定するための ACTION_SUFFIX 構成パラメータが追加されました。 たとえば、次のように設定した場合:
- 'ACTION_SUFFIX'=>'行動'
アプリケーションがデータベースと対話する必要がない場合、モデル クラスを定義する必要はありませんが、アクション コントローラーを定義する必要があります。アクション コントローラーは通常、プロジェクトの Lib/Action ディレクトリの下にあります。
Action コントローラーの定義は非常に単純で、Action 基本クラスを継承するだけです。例:空の操作とは、システムが指定された操作メソッドを見つけられない場合に、空の操作 (_empty) メソッドを見つけて実行することを意味します。このメカニズムを使用すると、エラー ページと一部の URL の最適化を実現できます。
空のモジュールの概念は、システムが指定されたモジュール名を見つけられない場合、システムが空のモジュール (EmptyAction) を見つけようとすることを意味し、このメカニズムを使用してエラー ページをカスタマイズし、URL を最適化できます。
4. モジュールのグループ化
モジュールのグループ化に関連する構成パラメータには次のものがあります。設定パラメータ | 説明 |
---|---|
APP_GROUP_LIST | プロジェクトのグループ化リスト (構成とはグループ化を有効にすることを意味します) |
デフォルト_グループ | デフォルトのグループ化 (デフォルト値はホーム) |
TMPL_FILE_DEPR | グループテンプレート内のモジュールとオペレーションの区切り文字、デフォルト値は「/」です |
VAR_グループ | グループ化された URL パラメータ名、デフォルトは g (通常モードの URL にのみ必要) |
- 'APP_GROUP_LIST' => 'Home,Admin', //プロジェクトグループ設定
ThinkPHP は、現在の操作の通常の実行に影響を与えることなく、URL_HTML_SUFFIX パラメーターを設定することによって、URL の末尾に必要な静的サフィックスを追加できます。たとえば、
を設定します- 'URL_HTML_SUFFIX'=>'shtml'
- http://サーバー名/ブログ/read/id/1
- http://サーバー名/ブログ/read/id/1.shtml
- 'URL_HTML_SUFFIX'=>'.shtml'
- 'URL_HTML_SUFFIX'=>'html|shmtl|xml' // 複数の分割
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>
但是不允许使用下面的定义方式来传参数<code>
- などの異なる 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 メソッドは、ルーティング ルールを次のように定義する場合、ルーティングもサポートできます:
注: テンプレート ファイル内で U メソッドを直接使用する場合は、{:U('パラメータ 1', 'パラメータ 2'...)} を使用する必要があります。詳細については、「8.3 テンプレート エンジンでの関数の使用」を参照してください。章。
アプリケーションに複数のサブドメインの操作アドレスが含まれる場合は、U メソッドでアドレスを生成する必要があるドメイン名を指定することもできます。例: <code>
<code>@ 指定する必要があるドメイン名を渡すだけです。
さらに、U メソッドの 5 番目のパラメーターが true に設定されている場合、現在のドメイン名が自動的に認識され、現在のアドレスのサブドメイン名がサブドメイン名の展開設定 APP_SUB_DOMAIN_DEPLOY および APP_SUB_DOMAIN_RULES に基づいて自動的に生成されることを意味します。 。
URL_CASE_INSENSITIVE がオンになっている場合、小文字の URL アドレスが均一に生成されます。
9. URLケース
プロジェクト構成に <code> を追加するだけです
<code>URL アクセスで大文字と小文字が区別されなくなっていることがわかります。
ここで注意すべき点は、UserTypeAction のモジュール クラスを定義する場合、URL アクセスは次のようにする必要があるということです: <code>
<code>利用系统提供的U方法可以为你自动生成相关的URL地址。
如果设置<code>システムが提供する U メソッドを使用して、関連する URL アドレスを自動的に生成します。
設定されている場合
<code>的话,URL就又变成:<code>
の場合、URLは次のようになります:<code>
注: URL の大文字と小文字の区別はシステムの命名規則を変更しません。システムの命名規則に従うことによってのみ、URL の大文字と小文字の区別を正しく実装できます。
<code>10. 手術前と手術後
システムは、現在の操作に前操作と後操作があるかどうかを検出し、それらが存在する場合は、前操作と後操作のメソッド名をメソッドの前に追加します。実行されます。例:
🎜 🎜<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モジュールの操作メソッドを呼び出しますシステムはアクション コントローラーを自動的にロードするため、UserAction クラスをインポートせずに直接インスタンス化できます。 そして、モジュール間の呼び出しを容易にするために、システムには A メソッドと R メソッドが組み込まれています。
$User = A('User');<code><code><code>事实上,A方法还支持跨分组或者跨项目调用,默认情况下是调用当前项目下面的模块。
跨项目调用的格式是:
A('[项目名://][分组名/]模块名')
例如:<code>
-
<code><code>
A('Admin://User') //Admin プロジェクトの User モジュールの呼び出しを示します
A('Admin/User') //Admin グループを呼び出す User モジュールを表します🎜 🎜A('Admin://Tool/User') //管理プロジェクトのツールグループを呼び出すユーザーモジュールを表します🎜 🎜🎜 R メソッドは、モジュールの操作メソッドの呼び出しを表します。呼び出し形式は、 🎜🎜R('[プロジェクト名://][グループ名/]モジュール名/操作名',array('パラメーター 1','パラメーター) です。 2分…))🎜🎜例:
- クラス UserAction は Action{
- R('ユーザー/情報',array(15))
<code><code><code>システムの Action クラスには、success と error という 2 つの組み込みジャンプ メソッドがあり、ページ ジャンプ プロンプトに使用され、ajax 送信をサポートできます。使用方法は非常に簡単です。例:
<code><code><code>系统的Action类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交。使用方法很简单,举例如下:<code>- $User = M('User') //User オブジェクトをインスタンス化します
$メッセージ | |
$ステータス | |
$waitSecond | ジャンプ待ち時間を秒単位で表示 |
$ジャンプURL | ジャンプページアドレス |
success メソッドと error メソッドは、現在のリクエストが Ajax リクエストであるかどうかを自動的に判断します。Ajax リクエストの場合、ajaxReturn メソッドが呼び出されて情報が返されます。詳細については、後の「AJAX リターン」セクションを参照してください。 <code><code><code> バージョン 3.1 以降、error メソッドと success メソッドは値の受け渡しをサポートしており、jump テンプレート メソッドでも ajax メソッドでも、assign メソッドを使用してパラメータを渡すことができます。例: |

thinkphp是国产框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

thinkphp基于的mvc分别是指:1、m是model的缩写,表示模型,用于数据处理;2、v是view的缩写,表示视图,由View类和模板文件组成;3、c是controller的缩写,表示控制器,用于逻辑处理。mvc设计模式是一种编程思想,是一种将应用程序的逻辑层和表现层进行分离的方法。

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了使用jwt认证的问题,下面一起来看一下,希望对大家有帮助。

thinkphp扩展有:1、think-migration,是一种数据库迁移工具;2、think-orm,是一种ORM类库扩展;3、think-oracle,是一种Oracle驱动扩展;4、think-mongo,一种MongoDb扩展;5、think-soar,一种SQL语句优化扩展;6、porter,一种数据库管理工具;7、tp-jwt-auth,一个jwt身份验证扩展包。

本篇文章给大家带来了关于ThinkPHP的相关知识,其中主要整理了使用think-queue实现redis消息队列的相关问题,下面一起来看一下,希望对大家有帮助。

thinkphp查询库是否存在的方法:1、打开相应的tp文件;2、通过“ $isTable=db()->query('SHOW TABLES LIKE '."'".$data['table_name']."'");if($isTable){...}else{...}”方式验证表是否存在即可。

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック



