모듈은 모델, 뷰, 컨트롤러 및 기타 지원 구성요소로 구성된 독립적인 소프트웨어 단위입니다. 최종 사용자는 애플리케이션 본체에 설치된 모듈의 컨트롤러에 액세스할 수 있으며, 애플리케이션은 애플리케이션으로 간주됩니다. 본체와 본체의 차이점은 모듈이 독립적으로 배포될 수 없으며 애플리케이션 본체에 속해야 한다는 것입니다.
모듈 만들기
모듈은 [[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 [ 'components' => [ // list of component configurations ], 'params' => [ // 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]] 속성 목록에 모듈을 추가하기만 하면 됩니다. 다음 코드의 응용 프로그램에 표시된 것처럼 기본 구성은 포럼 모듈을 사용합니다:
[ 'modules' => [ 'forum' => [ 'class' => 'app\modules\forum\Module', // ... 模块其他配置 ... ], ], ]
[[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['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操作。
最佳实践
模块在大型项目中常备使用,这些项目的特性可分组,每个组包含一些强相关的特性, 每个特性组可以做成一个模块由特定的开发人员和开发组来开发和维护。
在特性组上,使用模块也是重用代码的好方式,一些常用特性,如用户管理,评论管理,可以开发成模块, 这样在相关项目中非常容易被重用。

phpsession 실패 이유에는 구성 오류, 쿠키 문제 및 세션 만료가 포함됩니다. 1. 구성 오류 : 올바른 세션을 확인하고 설정합니다. 2. 쿠키 문제 : 쿠키가 올바르게 설정되어 있는지 확인하십시오. 3. 세션 만료 : 세션 시간을 연장하기 위해 세션을 조정합니다 .GC_MAXLIFETIME 값을 조정하십시오.

PHP에서 세션 문제를 디버그하는 방법 : 1. 세션이 올바르게 시작되었는지 확인하십시오. 2. 세션 ID의 전달을 확인하십시오. 3. 세션 데이터의 저장 및 읽기를 확인하십시오. 4. 서버 구성을 확인하십시오. 세션 ID 및 데이터를 출력, 세션 파일 컨텐츠보기 등을 통해 세션 관련 문제를 효과적으로 진단하고 해결할 수 있습니다.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

SESSION.GC_MAXLIFETIME 및 SESSION.COOKIE_LIFETIME을 설정하여 PHP에서 세션 수명을 구성 할 수 있습니다. 1) SESSION.GC_MAXLIFETIME 서버 측 세션 데이터의 생존 시간을 제어합니다. 2) 세션 .Cookie_Lifetime 클라이언트 쿠키의 수명주기를 제어합니다. 0으로 설정하면 브라우저가 닫히면 쿠키가 만료됩니다.

데이터베이스 스토리지 세션 사용의 주요 장점에는 지속성, 확장 성 및 보안이 포함됩니다. 1. 지속성 : 서버가 다시 시작 되더라도 세션 데이터는 변경되지 않아도됩니다. 2. 확장 성 : 분산 시스템에 적용하여 세션 데이터가 여러 서버간에 동기화되도록합니다. 3. 보안 : 데이터베이스는 민감한 정보를 보호하기 위해 암호화 된 스토리지를 제공합니다.

SessionHandlerInterface 인터페이스를 구현하여 PHP에서 사용자 정의 세션 처리 구현을 수행 할 수 있습니다. 특정 단계에는 다음이 포함됩니다. 1) CustomsessionHandler와 같은 SessionHandlerInterface를 구현하는 클래스 만들기; 2) 인터페이스의 방법 (예 : Open, Close, Read, Write, Despare, GC)의 수명주기 및 세션 데이터의 저장 방법을 정의하기 위해 방법을 다시 작성합니다. 3) PHP 스크립트에 사용자 정의 세션 프로세서를 등록하고 세션을 시작하십시오. 이를 통해 MySQL 및 Redis와 같은 미디어에 데이터를 저장하여 성능, 보안 및 확장 성을 향상시킬 수 있습니다.

SessionId는 웹 애플리케이션에 사용되는 메커니즘으로 사용자 세션 상태를 추적합니다. 1. 사용자와 서버 간의 여러 상호 작용 중에 사용자의 신원 정보를 유지하는 데 사용되는 무작위로 생성 된 문자열입니다. 2. 서버는 쿠키 또는 URL 매개 변수를 통해 클라이언트로 생성하여 보낸다. 3. 생성은 일반적으로 임의의 알고리즘을 사용하여 독창성과 예측 불가능 성을 보장합니다. 4. 실제 개발에서 Redis와 같은 메모리 내 데이터베이스를 사용하여 세션 데이터를 저장하여 성능 및 보안을 향상시킬 수 있습니다.

JWT 또는 쿠키를 사용하여 API와 같은 무국적 환경에서 세션을 관리 할 수 있습니다. 1. JWT는 무국적자 및 확장 성에 적합하지만 빅 데이터와 관련하여 크기가 크다. 2. 쿠키는보다 전통적이고 구현하기 쉽지만 보안을 보장하기 위해주의해서 구성해야합니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

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

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
