注: モジュールはバージョン 1.0.3 以降でサポートされます。
モジュールは、モデル、ビュー、コントローラー、その他のサポートコンポーネントを含む独立したソフトウェアユニットです。 多くの点で、モジュールはアプリケーションに似ています。主な違いは、モジュールは個別にデプロイできず、アプリケーション内に存在する必要があることです。 ユーザーは、通常のアプリケーションのコントローラーにアクセスするのと同じように、モジュール内のコントローラーにアクセスできます。
モジュールは、いくつかのシナリオで役立ちます。大規模なアプリケーションの場合、アプリケーションを複数のモジュールに分割する必要がある場合がありますが、各モジュールは独立して保守およびデプロイできます。ユーザー管理やコメント管理などの一部の共通機能はモジュールの形式で開発できるため、将来のプロジェクトで簡単に再利用できます。
モジュールはディレクトリに編成され、ディレクトリの名前はモジュールの一意の ID になります。 モジュール ディレクトリの構造は、アプリケーションのベース ディレクトリと非常によく似ています。 fourm
モジュールの一般的なディレクトリ構造を以下に示します。 fourm
的模块的典型的目录结构:
forum/ ForumModule.php 模块类文件 components/ 包含可复用的用户组件 views/ 包含小物件的视图文件 controllers/ 包含控制器类文件 DefaultController.php 默认的控制器类文件 extensions/ 包含第三方扩展 models/ 包含模块类文件 views/ 包含控制器视图和布局文件 layouts/ 包含布局文件 default/ 包含 DefaultController 的视图文件 index.php 首页视图文件
模块必须有一个继承自 CWebModule 的模块类。类的名字通过表达式 ucfirst($id).'Module'
确定, 其中的 $id
代表模块的 ID (或者说模块的目录名字)。 模块类是存储模块代码间可共享信息的中心位置。例如,我们可以使用CWebModule::params 存储模块参数,使用 CWebModule::components 分享模块级的 应用组件 .
提示: 我们可以使用Gii中的模块创建器创建新模块的基本骨架。
要使用模块,首先将模块目录放在 应用基础目录 的 modules
中。 然后在应用的 modules 属性中声明模块 ID 。例如,为了使用上面的 forum
模块, 我们可以使用如下 应用配置:
return array( ...... 'modules'=>array('forum',...), ...... );
模块也可以在配置时带有初始属性值。做法和配置 应用组件 很类似。 例如, forum
模块可以在其模块类中有一个名为postPerPage
的属性,它可以在 应用配置 中配置如下:
return array( ...... 'modules'=>array( 'forum'=>array( 'postPerPage'=>20, ), ), ...... );
模块的实例可通过当前活动控制器的 module 属性访问。在模块实例中,我们可以访问在模块级中共享的信息。 例如,为访问上面的 postPerPage
信息,我们可使用如下表达式:
$postPerPage=Yii::app()->controller->module->postPerPage; // or the following if $this refers to the controller instance // $postPerPage=$this->module->postPerPage;
模块中的控制器动作可以通过 路由 moduleID/controllerID/actionID
访问。 例如,假设上面的 forum
模块有一个名为 PostController
的控制器,我们就可以通过 路由 forum/post/create
访问此控制器中的 create
动作。 此路由对应的 URL 即 http://www.php.cn/
.
提示: 如果一个控制器位于
モジュールには、CWebModule から継承するモジュール クラスが必要です。クラスの名前は式controllers
目录的子目录中,我们仍然可以使用上述 路由 格式。 例如,假设PostController
位于forum/controllers/admin
中,我们可以通过forum/admin/post/create
访问create
rrreeeucfirst($id).'Module'
によって決定されます。$id
はモジュールの ID (またはモジュールのディレクトリ名) を表します。モジュール)。 モジュール クラスは、モジュール コード間で共有できる情報を保存する中心的な場所です。たとえば、CWebModule::params を使用してモジュール パラメーターを保存し、CWebModule::components を使用してモジュール レベルのアプリケーション コンポーネントを共有できます。
ヒント: Gii のモジュール クリエーターを使用して、新しいモジュール。 2. モジュールを使用する
モジュールを使用するには、まずアプリケーションのベース ディレクトリの modules
にモジュール ディレクトリを配置します。 次に、アプリケーションの modules 属性でモジュール ID を宣言します。たとえば、上記の forum
モジュールを使用するには、次のアプリケーション構成を使用できます:
forum
モジュールは、そのモジュール クラスに postPerPage
というプロパティを持つことができ、これはアプリケーション構成で次のように構成できます。 🎜 🎜🎜🎜モジュールのインスタンスには、現在アクティブなコントローラーのモジュール プロパティを通じてアクセスできます。モジュール インスタンス内では、モジュール レベルで共有される情報にアクセスできます。 たとえば、上記の postPerPage
情報にアクセスするには、次の式を使用できます: 🎜🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜🎜モジュール内のコントローラー アクションは、moduleID/controllerID 経由でルーティングできます。 /actionID
アクセス。 たとえば、上記の forum
モジュールに PostController
という名前のコントローラがあるとすると、ルート forum/post/create
を通じてこのコントロールにアクセスできます。ブラウザで >create
アクションを実行します。 このルートに対応する URL は http://www.php.cn/
です。🎜🎜🎜🎜ヒント:🎜コントローラーが controllers
のサブディレクトリにある場合ディレクトリにある場合でも、上記のルーティング形式を引き続き使用できます。 たとえば、PostController
が forum/controllers/admin
にあるとすると、forum/admin/post/create を通じて <code>create
にアクセスできます。 code> アクション。 🎜🎜🎜3. ネストされたモジュール🎜🎜モジュールは無限にネストできます。これは、あるモジュールに別のモジュールを含めることができ、この別のモジュールに他のモジュールを含めることができることを意味します。前者を 🎜親モジュール🎜 と呼び、後者を 🎜サブモジュール🎜 と呼びます。前にアプリケーション構成でモジュールを定義したのと同じように、サブモジュールは親モジュールの modules 属性で定義する必要があります。 🎜🎜子モジュールのコントローラーアクションにアクセスするには、ルートparentModuleID/childModuleID/controllerID/actionIDを使用する必要があります。 🎜🎜上記は、Yii Framework 公式シリーズ ガイド シリーズ 11 - 基礎知識: モジュールの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。 🎜🎜🎜🎜