モジュールは、モデル、ビュー、コントローラー、その他のサポート コンポーネントで構成される独立したソフトウェア ユニットであり、エンド ユーザーはアプリケーション本体にインストールされているモジュールのコントローラーにアクセスできます。モジュールは、アプリケーション本体とは異なります。重要なことは、モジュールは個別にデプロイできず、アプリケーションのサブジェクトに属している必要があるということです。
モジュールの作成
モジュールは [[yiibaseModule::basePath|base path]] というディレクトリに編成されており、このディレクトリには、対応するコントローラー、モデル、ビューなどのサブディレクトリがあります。コードの残りの部分はアプリケーションと非常によく似ています。 次の例は、モデルのディレクトリ構造を示しています。
forum/ Module.php 模块类文件 controllers/ 包含控制器类文件 DefaultController.php default 控制器类文件 models/ 包含模型类文件 views/ 包含控制器视图文件和布局文件 layouts/ 包含布局文件 default/ 包含DefaultController控制器视图文件 index.php index视图文件
Module class
各モジュールには [[yiibaseModule]] を継承するモジュール クラスがあり、このクラス ファイルはモジュールの [[yiibaseModule::basePath|base] に直接配置されます。 path] ] ディレクトリに保存され、自動的にロードできます。モジュールにアクセスすると、アプリケーション本体のインスタンスと同様に、モジュール クラスの一意のインスタンスが作成され、モジュール インスタンスは、モジュール内のコードがデータとコンポーネントを共有できるようにするために使用されます。
次の例はモジュール クラスを大まかに定義しています:
namespace app\modules\forum; class Module extends \yii\base\Module { public function init() { parent::init(); $this->params['foo'] = 'bar'; // ... 其他初始化代码 ... } }
init() メソッドにモジュール プロパティを初期化するためのコードが多数含まれている場合は、それらを構成に保存し、init() で次のコードを使用してロードできます。
public function init() { parent::init(); // 从config.php加载配置来初始化模块 \Yii::configure($this, require(__DIR__ . '/config.php')); }config.php 設定ファイル アプリケーションのメイン設定と同様に、次のコンテンツが含まれる場合があります。
<?php return [ 'components' => [ // list of component configurations ], 'params' => [ // list of parameters ], ];モジュール内のコントローラー モジュールのコントローラーを作成するとき、慣例として、コントローラー クラスをコントローラーのサブ名前空間に配置します。モジュール クラスの名前空間。これは、モジュール [[yiibaseModule::basePath|base path]] ディレクトリのコントローラ サブディレクトリにコントローラ クラス ファイルを配置することも意味します。 たとえば、前のセクションのフォーラム モジュールでポスト コントローラーを作成するには、次のようにコントローラー クラスを宣言する必要があります:
namespace app\modules\forum\controllers; use yii\web\Controller; class PostController extends Controller { // ... }[[yiibaseModule::controllerNamespace]] 属性を設定して、コントローラー クラスの名前空間をカスタマイズできます。一部のコントローラーがこの名前空間に存在しない場合は、アプリケーション本体の設定で行うのと同様に、 [[yiibaseModule::controllerMap]] 属性を設定してそれらにアクセスできるようにすることができます。 モジュール内のビュー ビューは、モジュールの[[yiibaseModule::basePath|base path]]に対応するディレクトリの下のviewsディレクトリに配置する必要があります。モジュール内のコントローラに対応するビューファイルを配置する必要があります。ここで、ControllerID はコントローラー ID に対応します。たとえば、コントローラー クラスが PostController であるとすると、ディレクトリはモジュール [[yiibaseModule::basePath|base] の下にあります。パス]] ディレクトリ。 モジュールは、モジュールのコントローラービューのレンダリングで使用されるレイアウトを指定できます。 レイアウト ファイルはデフォルトで views/layouts ディレクトリに配置されます。 [[yiibaseModule::layout]] 属性を設定してレイアウト名を指定できます。レイアウト属性名が設定されていない場合は、デフォルトでアプリケーション レイアウトが使用されます。 。 モジュールの使用 アプリケーションでモジュールを使用するには、アプリケーション本体設定の [[yiibaseApplication::modules|modules]] 属性のリストにモジュールを追加するだけです。次のコードのアプリケーション本体設定では、次のコードが使用されます。フォーラム module:
[ 'modules' => [ 'forum' => [ 'class' => 'app\modules\forum\Module', // ... 模块其他配置 ... ], ], ][[yiibaseApplication::modules|modules]] 属性は、モジュール構成配列を使用します。各配列キーは、アプリケーション内の一意のモジュールを識別するモジュール ID です。配列の値は構成です。モジュールの作成に使用されます。 ルーティング アプリケーション コントローラーへのアクセスと同様に、ルーティングはモジュール内のコントローラーをアドレス指定するためにも使用されます。モジュール内のコントローラーのルートはモジュール ID で始まり、その後にコントローラー ID と操作 ID が続く必要があります。 たとえば、アプリケーションが forum という名前のモジュールを使用すると仮定すると、ルート forum/post/index はモジュール内のポスト コントローラーのインデックス操作を表します。ルートにモジュール ID のみが含まれる場合、デフォルトの [[yiibaseModule::defaultRoute] ] 属性は、どのコントローラ/アクション、つまりルーティング フォーラムがフォーラム モジュールのデフォルト コントローラを表すかを決定するために使用されます。 モジュールへのアクセス モジュールでは、モジュール ID、モジュール パラメーター、モジュール コンポーネントなどにアクセスするために、モジュール クラスのインスタンスを取得する必要がある場合があります。次のステートメントを使用して取得できます:
$module = MyModuleClass::getInstance();MyModuleClass が対応する場所getInstance() メソッドは、現在要求されているモジュール クラスのインスタンスを返します。モジュールが要求されていない場合、このメソッドは手動でモジュール クラスを作成する必要がないことに注意してください。 1 つは、Yii がリクエストを処理するときに自動的に作成されるものとは異なります。 補足: モジュールを開発する場合、アプリケーションや他のモジュールではモジュールが任意の ID に対応する可能性があるため、モジュールが固定 ID を使用すると仮定することはできません。モジュール ID を取得するには、上記のコードを使用する必要があります。モジュール インスタンスを取得し、$module->id を通じてモジュール ID を取得します。 次のメソッドを使用してモジュール インスタンスにアクセスすることもできます:
// 获取ID为 "forum" 的模块 $module = \Yii::$app->getModule('forum'); // 获取处理当前请求控制器所属的模块 $module = \Yii::$app->controller->module;
第一种方式仅在你知道模块ID的情况下有效,第二种方式在你知道处理请求的控制器下使用。
一旦获取到模块实例,可访问注册到模块的参数和组件,例如:
$maxPostCount = $module->params['maxPostCount'];
引导启动模块
有些模块在每个请求下都有运行, [[yii\debug\Module|debug]] 模块就是这种, 为此将这种模块加入到应用主体的 [[yii\base\Application::bootstrap|bootstrap]] 属性中。
例如,如下示例的应用主体配置会确保debug模块每次都被加载:
[ 'bootstrap' => [ 'debug', ], 'modules' => [ 'debug' => 'yii\debug\Module', ], ]
模块嵌套
模块可无限级嵌套,也就是说,模块可以包含另一个包含模块的模块,我们称前者为父模块,后者为子模块, 子模块必须在父模块的[[yii\base\Module::modules|modules]]属性中申明,例如:
namespace app\modules\forum; class Module extends \yii\base\Module { public function init() { parent::init(); $this->modules = [ 'admin' => [ // 此处应考虑使用一个更短的命名空间 'class' => 'app\modules\forum\modules\admin\Module', ], ]; } }
在嵌套模块中的控制器,它的路由应包含它所有祖先模块的ID,例如forum/admin/dashboard/index代表 在模块forum中子模块admin中dashboard控制器的index操作。
最佳实践
模块在大型项目中常备使用,这些项目的特性可分组,每个组包含一些强相关的特性, 每个特性组可以做成一个模块由特定的开发人员和开发组来开发和维护。
在特性组上,使用模块也是重用代码的好方式,一些常用特性,如用户管理,评论管理,可以开发成模块, 这样在相关项目中非常容易被重用。

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

ホットトピック









