찾다
백엔드 개발PHP 튜토리얼ThinkPHP 애플리케이션 모드 확장 상세 설명_php 예시

ThinkPHP의 애플리케이션 모델을 사용하면 개발자가 이전보다 핵심 프레임워크를 더 쉽게 변환할 수 있으며 애플리케이션이 더 많은 환경과 다양한 요구 사항에 적응할 수 있습니다. 각 애플리케이션 모드에는 자체 모드 정의 파일이 있습니다. ThinkPHP3.1 버전과 비교하여 ThinkPHP3.2 버전은 ThinkPHP3.1 버전에서 Cli, Lite, Thin, AMF 및 더 명확하고 명확한 애플리케이션 모드 확장을 갖습니다. PHPRPC가 정의되어 있으며, 그 정의 방법은 ThinkPHP 3.2 버전과 유사합니다. 필요한 경우 Cli 모드가 ThinkPHP 프레임워크에 내장되어 있어 Cli 모드를 정의하지 않고도 정상적으로 사용할 수 있습니다. 별도로 자세한 조정이 필요한 경우 에 작성된 3.1 Cli 실행 모드 확장을 참조하세요. ThinkPHP는 개발 환경과 정형 환경 간의 편리한 모드 전환 방법도 제공합니다. ThinkPHP의 실행 프로세스를 따라가며 응용 프로그램 모드 확장의 미스터리를 분석해 보겠습니다.

1. 애플리케이션 모드 사용

애플리케이션 모드 확장을 살펴보기 전에 애플리케이션 모드 사용 방법을 살펴보겠습니다. 일반적으로 APP_MODE 상수는 항목 파일에 애플리케이션 모드 이름으로 정의되어 있습니다. 그러나 ThinkPHP 프레임워크 항목 파일을 분석해 보면 프레임워크의 기본 모드가 공통 모드(common)이고 자동으로 sae 환경을 식별할 수 있다는 것을 알게 되었습니다. 물론 전제는 APP_MODE 상수가 정의되어 있지 않다는 것입니다. 물론 ThinkPHP는 CLI 및 CGI 모드를 자동으로 식별할 수 있으며 CLI 및 CGI 환경에서 실행될 때 ThinkPHP 프레임워크는 기본적으로 이 두 가지 환경을 자동으로 미세 조정합니다. 물론 이 두 가지 애플리케이션 모드를 직접 확장할 수도 있습니다.

if(function_exists('saeAutoLoader')){// 自动识别SAE环境
  defined('APP_MODE')   or define('APP_MODE',   'sae');
  defined('STORAGE_TYPE') or define('STORAGE_TYPE', 'Sae');
}else{
  defined('APP_MODE')   or define('APP_MODE',    'common'); // 应用模式 默认为普通模式  
  defined('STORAGE_TYPE') or define('STORAGE_TYPE',  'File'); // 存储类型 默认为File  
}

2. 애플리케이션 모드 정의

ThinkPHP 프레임워크에서는 ThinkPHP 프레임워크 항목과 프레임워크 부팅 클래스를 제외하고 기본적으로 다른 모든 기능은 애플리케이션 모드를 통해 변경 및 확장될 수 있습니다. 애플리케이션 모드를 추가하려면 모드 정의만 정의하면 됩니다. ThinkPHPMode 디렉토리 아래에 있는 파일입니다. 공통 모드를 분석하여 학습할 수 있습니다. 이 파일의 코드는 다음과 같습니다.

//文件路径:ThinkPHP/Mode/common.php
/**
 * ThinkPHP 普通模式定义
 * 定义一个模式文件,只需要返回一个模式包含文件的数组即可
 * 在数组中主要包含4种扩展文件列表:
 *   config 为默认加载配置文件列表
 *   alias 为核心类库别名配置列表
 *   core 需要加载的核心函数和类文件列表
 *   tags 行为配置列表
 *
 * 如果在应用模式定义中加载一个自定类,那个自定义类的命名空间必须是Think
 */
return array(
  // 配置文件
  'config'  => array(
    THINK_PATH.'Conf/convention.php',  // 系统惯例配置
    CONF_PATH.'config.php',   // 应用公共配置
  ),
 
  // 别名定义
  'alias'   => array(
    'Think\Log'        => CORE_PATH . 'Log'.EXT,
    'Think\Log\Driver\File'  => CORE_PATH . 'Log/Driver/File'.EXT,
    'Think\Exception'     => CORE_PATH . 'Exception'.EXT,
    'Think\Model'       => CORE_PATH . 'Model'.EXT,
    'Think\Db'        => CORE_PATH . 'Db'.EXT,
    'Think\Template'     => CORE_PATH . 'Template'.EXT,
    'Think\Cache'       => CORE_PATH . 'Cache'.EXT,
    'Think\Cache\Driver\File' => CORE_PATH . 'Cache/Driver/File'.EXT,
    'Think\Storage'      => CORE_PATH . 'Storage'.EXT,
  ),
 
  // 函数和类文件
  'core'   => array(
    THINK_PATH.'Common/functions.php',
    COMMON_PATH.'Common/function.php',
    CORE_PATH . 'Hook'.EXT,
    CORE_PATH . 'App'.EXT,
    CORE_PATH . 'Dispatcher'.EXT,
    //CORE_PATH . 'Log'.EXT,
    CORE_PATH . 'Route'.EXT,
    CORE_PATH . 'Controller'.EXT,
    CORE_PATH . 'View'.EXT,
    BEHAVIOR_PATH . 'BuildLiteBehavior'.EXT,
    BEHAVIOR_PATH . 'ParseTemplateBehavior'.EXT,
    BEHAVIOR_PATH . 'ContentReplaceBehavior'.EXT,
  ),
  // 行为扩展定义
  'tags' => array(
    'app_init'   => array(
      'Behavior\BuildLiteBehavior', // 生成运行Lite文件
    ),    
    'app_begin'   => array(
      'Behavior\ReadHtmlCacheBehavior', // 读取静态缓存
    ),
    'app_end'    => array(
      'Behavior\ShowPageTraceBehavior', // 页面Trace显示
    ),
    'view_parse'  => array(
      'Behavior\ParseTemplateBehavior', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
    ),
    'template_filter'=> array(
      'Behavior\ContentReplaceBehavior', // 模板输出替换
    ),
    'view_filter'  => array(
      'Behavior\WriteHtmlCacheBehavior', // 写入静态缓存
    ),
  ),
);

이 공통 애플리케이션 모드 코드를 본 후 ThinkPHP의 애플리케이션 모드 확장이 무엇인지 어느 정도 이해했지만 여전히 알고 있었지만 로드된 파일 목록 및 구성을 정의하면 확장의 핵심이 어떻게 바뀌는지 알지 못했습니다. 뼈대? 그 비밀은 ThinkPHP 부트스트랩 클래스에 있습니다. 다음을 살펴보겠습니다!

//判断是否存在core.php配置文件(这是开发环境临时定义的运行模式,我是这么理解的)
     //否者加载APP_MODE定义的模式文件
     $mode  =  include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';
     //加载模式中core定义的核心文件列表
     foreach ($mode['core'] as $file){
       if(is_file($file)) {
        include $file;
        if(!APP_DEBUG) $content  .= compile($file);
       }
     }
 
     //加载模式中定义的config配置文件列表
     foreach ($mode['config'] as $key=>$file){
       is_numeric($key)?C(include $file):C($key,include $file);
     }
 
     // 读取当前应用模式对应的配置文件
     if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.'.php'))
       C(include CONF_PATH.'config_'.APP_MODE.'.php'); 
 
     // 加载模式中alias别名列表定义
     if(isset($mode['alias'])){
       self::addMap(is_array($mode['alias'])?$mode['alias']:include $mode['alias']);
     }
 
     // 加载应用别名定义文件
     if(is_file(CONF_PATH.'alias.php'))
       self::addMap(include CONF_PATH.'alias.php');
 
     // 加载模式中tags行为定义
     if(isset($mode['tags'])) {
       Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
     }
 
     // 加载应用行为定义
     if(is_file(CONF_PATH.'tags.php'))
       // 允许应用增加开发模式配置定义
       Hook::import(include CONF_PATH.'tags.php'); 
 
     // 加载框架底层语言包
     L(include THINK_PATH.'Lang/'.strtolower(C('DEFAULT_LANG')).'.php');

ThinkPHP::start()의 이 코드를 통해 패턴 정의 파일의 의미와 구현 방법이 완벽하고 매끄럽게 연결됩니다.

3. 간단한 작동 모드 정의

설명서에 모드 확장의 예가 있습니다. 여기에서 간단한 실행 모드를 분석하고 정의할 수 있습니다. 먼저 ThinkPHP/Mode 디렉터리에 새 lite.php 파일을 만들고 다음과 같이 내용을 정의합니다. :

return array(  
// 配置文件 
'config'  => array(
        THINK_PATH.'Conf/convention.php',   // 系统惯例配置
        CONF_PATH.'config.php',   // 应用公共配置 
 ),
 
 // 别名定义  
 'alias'   => array(
       'Think\Exception'     => CORE_PATH . 'Exception'.EXT,
       'Think\Model'       => CORE_PATH . 'Model'.EXT, 
       'Think\Db'        => CORE_PATH . 'Db'.EXT,
       'Think\Cache'       => CORE_PATH . 'Cache'.EXT,
       'Think\Cache\Driver\File' => CORE_PATH . 'Cache/Driver/File'.EXT,
       'Think\Storage'      => CORE_PATH . 'Storage'.EXT,
 ),
 
 // 函数和类文件 
 'core'   => array(
       MODE_PATH.'Lite/functions.php', 
       COMMON_PATH.'Common/function.php',
       MODE_PATH . 'Lite/App'.EXT, 
       MODE_PATH . 'Lite/Dispatcher'.EXT, 
       MODE_PATH . 'Lite/Controller'.EXT,
       MODE_PATH . 'Lite/View'.EXT,
       CORE_PATH . 'Behavior'.EXT,
 ),
 
 // 行为扩展定义  
 'tags' => array(
       'view_parse'  => array(
           'Behavior\ParseTemplate', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
        ),
        'template_filter'=> array(
           'Behavior\ContentReplace', // 模板输出替换
        ),
 ),
);

위 구성에서 코어에 있는 대부분의 코어 파일이 교체되었음을 확인했습니다. 물론 이러한 교체가 필요한 프로그램 기능은 직접 구현해야 하지만 직접 복사하는 것이 좋습니다. 일반 모드에서 정의한 코어 파일을 수정합니다. 다음으로 ThinkPHP 애플리케이션 개발에서 다음과 같은 핵심 클래스 라이브러리 확장 파일인 App.class.php

를 구현하겠습니다.

ThinkPHP/Mode 디렉토리에 Lite 디렉토리를 생성하고 lite 디렉토리에 App.class.php 파일을 생성합니다. 프로그램 파일의 구현은 다음과 같습니다.

//模式扩展类库必须是Think命名空间
namespace Think;
 
/**
 * ThinkPHP 应用程序类 执行应用过程管理 Lite模式扩展类
 * 实现ThinkPHP核心类库扩展时,尽可能仿造原有类库实现(除非对ThinkPHP框架源码特别了解)
 * 因为在其他没有扩展的核心文件中可能会调用扩展的核心类文件中的某个方法,除非你打算全部扩展
 */
class App{
/**
 * 应用程序初始化
 * @access public
 * @return void
 */
static public function init() {
    //具体现实
}
 
/**
 * 执行应用程序
 * @access public
 * @return void
 */
static public function exec() {
    //具体实现
}
 
/**
 * 运行应用实例 入口文件使用的快捷方法
 * @access public
 * @return void
 */
static public function run() {
    //具体实现
}
 
static public function logo(){
    //具体实现
}
}

해당 파일의 확장 파일을 모두 구현한 후 프레임워크 항목 파일에 lite로 APP_MODE 상수를 정의할 수 있습니다.

또 한 가지 주의할 점은 동작 모드 변경을 위해 매뉴얼에서 정의해야 하는 MODE_NAME 상수는 이전 버전 3.1에서 동작 모드를 정의할 때 사용한 방식이다. 이에 주의할 필요가 있습니다.

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
thinkphp是不是国产框架thinkphp是不是国产框架Sep 26, 2022 pm 05:11 PM

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

一起聊聊thinkphp6使用think-queue实现普通队列和延迟队列一起聊聊thinkphp6使用think-queue实现普通队列和延迟队列Apr 20, 2022 pm 01:07 PM

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

thinkphp的mvc分别指什么thinkphp的mvc分别指什么Jun 21, 2022 am 11:11 AM

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

实例详解thinkphp6使用jwt认证实例详解thinkphp6使用jwt认证Jun 24, 2022 pm 12:57 PM

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

thinkphp 怎么查询库是否存在thinkphp 怎么查询库是否存在Dec 05, 2022 am 09:40 AM

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

thinkphp扩展插件有哪些thinkphp扩展插件有哪些Jun 13, 2022 pm 05:45 PM

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使用think-queue实现redis消息队列Jun 28, 2022 pm 03:33 PM

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

thinkphp怎么设置伪静态去除目录thinkphp怎么设置伪静态去除目录Dec 05, 2022 am 09:35 AM

thinkphp设置伪静态去除目录的方法:1、在httpd.conf配置文件中加载mod_rewrite.so模块;2、将httpd.conf中Allowoverride None的None改为All;3、修改对应的项目配置文件;4、在项目的根目录下面建立一个.htaccess文件即可。

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를 무료로 생성하십시오.

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.