찾다
Yii2.0—모듈Nov 25, 2016 pm 02:09 PM
yii기준 치수

모듈은 모델, 뷰, 컨트롤러 및 기타 지원 구성요소로 구성된 독립적인 소프트웨어 단위입니다. 최종 사용자는 애플리케이션 본체에 설치된 모듈의 컨트롤러에 액세스할 수 있으며, 애플리케이션은 애플리케이션으로 간주됩니다. 본체와 본체의 차이점은 모듈이 독립적으로 배포될 수 없으며 애플리케이션 본체에 속해야 한다는 것입니다.

모듈 만들기

모듈은 [[yiibaseModule::basePath|base path]]라는 디렉터리로 구성됩니다. 이 디렉터리에는 각각 컨트롤러, 모델, 뷰 등의 하위 디렉터리가 있습니다. 컨트롤러, 모델, 뷰 및 기타 코드에 해당하며 애플리케이션과 매우 유사합니다. 다음 예는 모델의 디렉토리 구조를 보여줍니다.

forum/
    Module.php                   模块类文件
    controllers/                 包含控制器类文件
        DefaultController.php    default 控制器类文件
    models/                      包含模型类文件
    views/                       包含控制器视图文件和布局文件
        layouts/                 包含布局文件
        default/                 包含DefaultController控制器视图文件
            index.php            index视图文件

모듈 클래스

각 모듈에는 [[yiibaseModule]]을 상속하는 모듈 클래스가 있으며, 클래스 파일은 다음 위치에 직접 배치됩니다. 모듈 [[yiibaseModule::basePath|기본 경로]] 디렉터리에 저장되며 자동으로 로드될 수 있습니다. 모듈에 액세스하면 모듈 클래스의 고유한 인스턴스가 애플리케이션 본문 인스턴스와 유사하게 생성됩니다. 모듈 인스턴스는 모듈 내의 코드가 데이터와 구성 요소를 공유하는 데 사용됩니다.

다음 예에서는 모듈 클래스를 대략적으로 정의합니다.

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 [ &#39;components&#39; => [ // list of component configurations ], &#39;params&#39; => [ // list of parameters ], ];

모듈의 컨트롤러

모듈용 컨트롤 만들기 모듈을 사용할 때 컨트롤러 클래스를 모듈 클래스 네임스페이스의 컨트롤러 하위 네임스페이스에 배치하는 것이 관례입니다. 이는 또한 컨트롤러 클래스 파일을 모듈의 컨트롤러 하위 네임스페이스에 배치하는 것을 의미합니다. [[yiibaseModule::basePath|기본 경로]] 디렉터리에 있습니다. 예를 들어 이전 섹션의 포럼 모듈에서 게시물 컨트롤러를 생성하려면 컨트롤러 클래스를 다음과 같이 선언해야 합니다.

namespace app\modules\forum\controllers; use yii\web\Controller; class PostController extends Controller { // ... }

[[yiibaseModule::controllerNamespace]] 속성을 사용자 정의하도록 구성할 수 있습니다. 컨트롤러 클래스의 이름 지정 공간, 일부 컨트롤러가 더 이상 네임스페이스에 없으면 애플리케이션 본문 구성에서 수행되는 것과 유사하게 [[yiibaseModule::controllerMap]] 속성을 구성하여 해당 컨트롤러에 액세스할 수 있습니다.

모듈 내 뷰

뷰는 모듈의 [[yiibaseModule::basePath|base path]]에 해당하는 디렉터리 아래의 views 디렉터리에 있어야 합니다. 모듈의 컨트롤러는 views/ControllerID 디렉터리에 배치해야 합니다. 여기서 ControllerID는 컨트롤러 ID에 해당합니다. 예를 들어, 컨트롤러 클래스가 PostController라고 가정하면 디렉터리는 아래의 views/post 디렉터리에 해당합니다. 모듈 [[yiibaseModule::basePath|기본 경로]] 디렉터리.

모듈은 모듈의 컨트롤러 보기 렌더링에 사용되는 레이아웃을 지정할 수 있습니다. 레이아웃 파일은 기본적으로 views/layouts 디렉터리에 배치됩니다. 레이아웃 이름을 지정하려면 [[yiibaseModule::layout]] 속성을 구성하면 기본적으로 애플리케이션 레이아웃이 사용됩니다. .

모듈 사용

애플리케이션에서 모듈을 사용하려면 애플리케이션 본문 구성의 [[yiibaseApplication::modules|modules]] 속성 목록에 모듈을 추가하기만 하면 됩니다. 다음 코드의 응용 프로그램에 표시된 것처럼 기본 구성은 포럼 모듈을 사용합니다:

[ &#39;modules&#39; => [ &#39;forum&#39; => [ &#39;class&#39; => &#39;app\modules\forum\Module&#39;, // ... 模块其他配置 ... ], ], ]

[[yiibaseApplication::modules|modules]] 속성은 모듈 구성 배열을 사용하며 각 배열 키는 애플리케이션에서 고유한 모듈을 식별하는 모듈 ID입니다. 값은 모듈을 생성하는 데 사용되는 구성입니다.

라우팅

라우팅은 애플리케이션 컨트롤러에 액세스하는 것과 유사하게 모듈의 컨트롤러 주소를 지정하는 데에도 사용됩니다. 모듈의 컨트롤러에 대한 경로는 모듈 ID로 시작하고 그 뒤에 컨트롤러가 와야 합니다. ID 및 작업 ID입니다. 예를 들어, 애플리케이션이 forum이라는 모듈을 사용한다고 가정하면, forum/post/index 경로는 모듈에서 post 컨트롤러의 인덱스 작업을 나타냅니다. 경로에 모듈 ID만 포함되어 있으면 기본값은 [[yiibaseModule::defaultRoute]입니다. ] 속성은 어떤 컨트롤러/작업, 즉 라우팅 포럼이 포럼 모듈의 기본 컨트롤러를 나타낼 수 있는지 결정하는 데 사용됩니다.

모듈 액세스

모듈에서는 모듈 ID, 모듈 매개변수, 모듈 구성 요소 등에 액세스하기 위해 모듈 클래스의 인스턴스를 얻어야 하는 경우가 많습니다. 다음 명령문을 사용하여 획득:

$module = MyModuleClass::getInstance();

MyModuleClass는 원하는 모듈 클래스에 해당합니다. getInstance() 메서드는 현재 요청된 모듈 클래스 인스턴스를 반환합니다. 모듈이 요청되지 않으면 이 메서드는 비어 있는 것을 반환합니다. 모듈 클래스는 Yii가 요청을 처리할 때 자동으로 생성되는 것과 다르기 때문에 수동으로 생성할 필요가 없습니다.

추가: 모듈을 개발할 때 모듈이 고정 ID를 사용한다고 가정할 수 없습니다. 왜냐하면 애플리케이션이나 다른 모듈에서 모듈이 모든 ID에 해당할 수 있기 때문입니다. 모듈 ID를 얻으려면 다음을 수행해야 합니다. 위의 코드를 사용하여 모듈 인스턴스를 얻은 다음 $module->id를 통해 모듈 ID를 가져옵니다.

다음 방법을 사용하여 모듈 인스턴스에 액세스할 수도 있습니다.

// 获取ID为 "forum" 的模块 $module = \Yii::$app->getModule('forum'); // 获取处理当前请求控制器所属的模块 $module = \Yii::$app->controller->module;

第一种方式仅在你知道模块ID的情况下有效,第二种方式在你知道处理请求的控制器下使用。

一旦获取到模块实例,可访问注册到模块的参数和组件,例如:

$maxPostCount = $module->params[&#39;maxPostCount&#39;];

引导启动模块

有些模块在每个请求下都有运行, [[yii\debug\Module|debug]] 模块就是这种, 为此将这种模块加入到应用主体的 [[yii\base\Application::bootstrap|bootstrap]] 属性中。

例如,如下示例的应用主体配置会确保debug模块每次都被加载:

[ &#39;bootstrap&#39; => [ &#39;debug&#39;, ], &#39;modules&#39; => [ &#39;debug&#39; => &#39;yii\debug\Module&#39;, ], ]

模块嵌套

模块可无限级嵌套,也就是说,模块可以包含另一个包含模块的模块,我们称前者为父模块,后者为子模块, 子模块必须在父模块的[[yii\base\Module::modules|modules]]属性中申明,例如:

namespace app\modules\forum; class Module extends \yii\base\Module { public function init() { parent::init(); $this->modules = [ &#39;admin&#39; => [ 
// 此处应考虑使用一个更短的命名空间 &#39;class&#39; => &#39;app\modules\forum\modules\admin\Module&#39;, ], ]; } }

在嵌套模块中的控制器,它的路由应包含它所有祖先模块的ID,例如forum/admin/dashboard/index代表 在模块forum中子模块admin中dashboard控制器的index操作。

最佳实践

模块在大型项目中常备使用,这些项目的特性可分组,每个组包含一些强相关的特性, 每个特性组可以做成一个模块由特定的开发人员和开发组来开发和维护。

在特性组上,使用模块也是重用代码的好方式,一些常用特性,如用户管理,评论管理,可以开发成模块, 这样在相关项目中非常容易被重用。


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
php如何使用Yii3框架?php如何使用Yii3框架?May 31, 2023 pm 10:42 PM

随着互联网的不断发展,Web应用程序开发的需求也越来越高。对于开发人员而言,开发应用程序需要一个稳定、高效、强大的框架,这样可以提高开发效率。Yii是一款领先的高性能PHP框架,它提供了丰富的特性和良好的性能。Yii3是Yii框架的下一代版本,它在Yii2的基础上进一步优化了性能和代码质量。在这篇文章中,我们将介绍如何使用Yii3框架来开发PHP应用程序。

如何使用PHP框架Yii开发一个高可用的云备份系统如何使用PHP框架Yii开发一个高可用的云备份系统Jun 27, 2023 am 09:04 AM

随着云计算技术的不断发展,数据的备份已经成为了每个企业必须要做的事情。在这样的背景下,开发一款高可用的云备份系统尤为重要。而PHP框架Yii是一款功能强大的框架,可以帮助开发者快速构建高性能的Web应用程序。下面将介绍如何使用Yii框架开发一款高可用的云备份系统。设计数据库模型在Yii框架中,数据库模型是非常重要的一部分。因为数据备份系统需要用到很多的表和关

Yii2 vs Phalcon:哪个框架更适合开发显卡渲染应用?Yii2 vs Phalcon:哪个框架更适合开发显卡渲染应用?Jun 19, 2023 am 08:09 AM

在当前信息时代,大数据、人工智能、云计算等技术已经成为了各大企业关注的热点。在这些技术中,显卡渲染技术作为一种高性能图形处理技术,受到了越来越多的关注。显卡渲染技术被广泛应用于游戏开发、影视特效、工程建模等领域。而对于开发者来说,选择一个适合自己项目的框架,是一个非常重要的决策。在当前的语言中,PHP是一种颇具活力的语言,一些优秀的PHP框架如Yii2、Ph

Yii框架中的数据查询:高效地访问数据Yii框架中的数据查询:高效地访问数据Jun 21, 2023 am 11:22 AM

Yii框架是一个开源的PHPWeb应用程序框架,提供了众多的工具和组件,简化了Web应用程序开发的流程,其中数据查询是其中一个重要的组件之一。在Yii框架中,我们可以使用类似SQL的语法来访问数据库,从而高效地查询和操作数据。Yii框架的查询构建器主要包括以下几种类型:ActiveRecord查询、QueryBuilder查询、命令查询和原始SQL查询

Symfony vs Yii2:哪个框架更适合开发大型Web应用?Symfony vs Yii2:哪个框架更适合开发大型Web应用?Jun 19, 2023 am 10:57 AM

随着Web应用需求的不断增长,开发者们在选择开发框架方面也越来越有选择的余地。Symfony和Yii2是两个备受欢迎的PHP框架,它们都具有强大的功能和性能,但在面对需要开发大型Web应用时,哪个框架更适合呢?接下来我们将对Symphony和Yii2进行比较分析,以帮助你更好地进行选择。基本概述Symphony是一个由PHP编写的开源Web应用框架,它是建立

yii如何将对象转化为数组或直接输出为json格式yii如何将对象转化为数组或直接输出为json格式Jan 08, 2021 am 10:13 AM

yii框架:本文为大家介绍了yii将对象转化为数组或直接输出为json格式的方法,具有一定的参考价值,希望能够帮助到大家。

Yii2编程指南:运行Cron服务的方法Yii2编程指南:运行Cron服务的方法Sep 01, 2023 pm 11:21 PM

如果您问“Yii是什么?”查看我之前的教程:Yii框架简介,其中回顾了Yii的优点,并概述了2014年10月发布的Yii2.0的新增功能。嗯>在这个使用Yii2编程系列中,我将指导读者使用Yii2PHP框架。在今天的教程中,我将与您分享如何利用Yii的控制台功能来运行cron作业。过去,我在cron作业中使用了wget—可通过Web访问的URL来运行我的后台任务。这引发了安全问题并存在一些性能问题。虽然我在我们的启动系列安全性专题中讨论了一些减轻风险的方法,但我曾希望过渡到控制台驱动的命令

分享10个有趣且实用的Python模块,看看他们的功能吧!分享10个有趣且实用的Python模块,看看他们的功能吧!Feb 18, 2022 am 10:51 AM

Python程序有有许多有助于高效编程的模块和第三方包,了解这些模块的正确使用方法是很重要的,下面本篇文章就来给大家总结分享10个有趣且实用的Python模块,一起看看他们的功能吧!

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.