@app一共包含哪些部分?使用场景是什么?底层原理是什么?

1. @app 包含哪些部分?

想象一下,你在一家咖啡店:

  • 你需要一个工作区(@app)来存放所有的菜单(文件)、工具(配置)和员工(代码逻辑)。
  • 在 Yii2 中,@app 是应用程序的根目录别名,包含了所有与应用相关的核心内容。
(1) 核心组成部分
  1. 配置文件

    • 配置文件定义了应用的行为,如路由规则、数据库连接、组件注册等。
    • 示例:
      // config/web.php
      return [
          'id' => 'basic',
          'basePath' => dirname(__DIR__),
          'components' => [
              'db' => [
                  'class' => 'yii\db\Connection',
                  'dsn' => 'mysql:host=localhost;dbname=test',
                  'username' => 'root',
                  'password' => '',
              ],
          ],
      ];
      
  2. 控制器(Controllers)

    • 控制器负责处理用户请求并返回响应。
    • 示例:
      namespace app\controllers;
      
      use yii\web\Controller;
      
      class SiteController extends Controller
      {
          public function actionIndex()
          {
              return $this->render('index');
          }
      }
      
  3. 模型(Models)

    • 模型用于处理数据逻辑(如数据库操作、业务规则)。
    • 示例:
      namespace app\models;
      
      use yii\db\ActiveRecord;
      
      class User extends ActiveRecord
      {
          public static function tableName()
          {
              return 'user';
          }
      }
      
  4. 视图(Views)

    • 视图负责渲染 HTML 页面,展示数据给用户。
    • 示例:
      <!-- views/site/index.php -->
      <h1>Welcome to My App!</h1>
      <p>This is the home page.</p>
      
  5. 迁移文件(Migrations)

    • 迁移文件用于管理数据库结构的变化。
    • 示例:
      use yii\db\Migration;
      
      class m230101_000001_create_table_user extends Migration
      {
          public function up()
          {
              $this->createTable('user', [
                  'id' => $this->primaryKey(),
                  'username' => $this->string()->notNull(),
              ]);
          }
      
          public function down()
          {
              $this->dropTable('user');
          }
      }
      
  6. 运行时文件(Runtime)

    • runtime 目录存储临时文件(如日志、缓存)。
    • 示例:
      runtime/logs/app.log
      
  7. 公共资源(Assets)

    • assets 目录存放静态资源(如 CSS、JavaScript、图片)。
    • 示例:
      web/assets/css/style.css
      
  8. 入口脚本(Entry Script)

    • 入口脚本是应用的启动点,通常为 web/index.php
    • 示例:
      defined('YII_DEBUG') or define('YII_DEBUG', true);
      require __DIR__ . '/../vendor/autoload.php';
      require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
      
      $config = require __DIR__ . '/../config/web.php';
      (new yii\web\Application($config))->run();
      

2. 使用场景是什么?

(1) 快速开发 Web 应用
  • 场景:基于 Yii2 的 MVC 架构快速构建 Web 应用。
  • 示例:
    ./yii serve
    
(2) 数据库管理
  • 场景:通过迁移文件管理数据库结构的变化。
  • 示例:
    ./yii migrate
    
(3) RESTful API 开发
  • 场景:创建 RESTful API,供前端或第三方调用。
  • 示例:
    namespace app\controllers;
    
    use yii\rest\ActiveController;
    
    class UserController extends ActiveController
    {
        public $modelClass = 'app\models\User';
    }
    
(4) 日志与调试
  • 场景:记录应用日志、调试错误。
  • 示例:
    Yii::info('This is a log message.');
    
(5) 扩展集成
  • 场景:集成第三方扩展(如 mdmsoft/yii2-admin)以增强功能。
  • 示例:
    composer require mdmsoft/yii2-admin
    

3. 底层原理是什么?

(1) 别名机制
  • @app 别名
    • @app 是 Yii2 提供的别名,指向应用的根目录。
    • 示例:
      echo \Yii::getAlias('@app'); // 输出 /path/to/project
      
(2) 自动加载
  • Composer 自动加载
    • Yii2 借助 Composer 的自动加载机制加载类文件。
  • 命名空间映射
    • 类名与文件路径通过 PSR-4 标准映射。
    • 示例:
      namespace app\controllers;
      
      class SiteController {}
      
      文件路径为 controllers/SiteController.php
(3) 请求处理流程
  • 入口脚本
    • 用户请求首先到达入口脚本(web/index.php)。
  • 应用初始化
    • 加载配置文件,创建应用实例。
  • 路由解析
    • 根据 URL 路由规则找到对应的控制器和动作。
  • 响应生成
    • 控制器处理请求并返回响应。
(4) 组件化设计
  • 核心组件
    • Yii2 提供了许多核心组件(如 dbcachelog),可通过配置文件启用。
  • 自定义组件
    • 可以注册自定义组件,扩展应用功能。
    • 示例:
      'components' => [
          'mailer' => [
              'class' => 'yii\swiftmailer\Mailer',
              'useFileTransport' => true,
          ],
      ],
      

4. 图示说明

(1) @app 目录结构
@app/
+--------------------------+
| config/                 | (配置文件)
+--------------------------+
| controllers/            | (控制器)
+--------------------------+
| models/                 | (模型)
+--------------------------+
| views/                  | (视图)
+--------------------------+
| migrations/             | (迁移文件)
+--------------------------+
| runtime/                | (运行时文件)
+--------------------------+
| web/                    | (入口脚本和公共资源)
+--------------------------+
| vendor/                 | (依赖库)
+--------------------------+
(2) 请求处理流程
用户请求 -> 入口脚本 -> 加载配置 -> 初始化应用 -> 路由解析 -> 控制器处理 -> 返回响应

5. 总结

(1) 核心组成部分
  • 配置文件:定义应用行为。
  • 控制器:处理用户请求。
  • 模型:处理数据逻辑。
  • 视图:渲染页面。
  • 迁移文件:管理数据库结构。
  • 运行时文件:存储临时文件。
  • 公共资源:存放静态资源。
  • 入口脚本:启动应用。
(2) 使用场景
  • 快速开发 Web 应用。
  • 数据库管理。
  • RESTful API 开发。
  • 日志与调试。
  • 扩展集成。
(3) 底层原理
  • 别名机制@app 别名指向应用根目录。
  • 自动加载:通过 Composer 和 PSR-4 加载类文件。
  • 请求处理流程:从入口脚本到响应生成。
  • 组件化设计:核心组件与自定义组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值