PHP学院的中学生 2023-07-24 17:04:39 2762次浏览 1条回复 0 0 0

在 Yii2 中,components 是用于配置和管理各种应用程序组件的关键部分。组件是 Yii2 框架中的基本构建块,可以是数据库连接、缓存、日志处理、邮件发送等。通过在配置文件中定义 components,我们可以在整个应用程序中轻松访问和使用这些组件。

底层原理:

组件的配置:在 Yii2 中,组件配置是以数组的形式定义在应用程序的配置文件中,通常是 config/web.php 或 config/console.php。配置文件可以定义多个组件,每个组件都有一个唯一的名称,用于在应用程序的其他部分引用和访问该组件。

组件的实例化和注册:当应用程序启动时,Yii2 框架会根据配置文件中的组件定义,实例化并注册这些组件。这意味着当你访问应用程序的某个组件时,Yii2 会返回该组件的实例,并且这个实例将在整个应用程序的生命周期内保持不变,以确保组件的单例模式。

组件的访问:要在 Yii2 应用程序中访问组件,可以使用 Yii::$app->componentName 的方式,其中 componentName 是在配置文件中定义的组件名称。通过这种方式,你可以在任何地方访问和使用组件的功能,而不需要重复实例化或管理组件的生命周期。

组件的依赖注入:Yii2 框架还支持组件之间的依赖注入。这意味着你可以在定义一个组件时,通过 depends 属性指定该组件依赖于其他组件。这样,当实例化一个组件时,Yii2 会自动解析和注入该组件所依赖的其他组件,使组件之间的耦合度降低,代码更加灵活和可维护。

示例:以下是一个简单的组件配置示例,演示了如何定义一个数据库连接组件和一个缓存组件:

return [
    'components' => [
        'db' => [ // 数据库连接组件
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=mydatabase',
            'username' => 'db_user',
            'password' => 'db_password',
            'charset' => 'utf8',
        ],
        'cache' => [ // 缓存组件
            'class' => 'yii\caching\FileCache',
        ],
        // 其他组件的配置...
    ],
    // 应用程序的其他配置...
];

在上述示例中,我们定义了两个组件:db 是一个数据库连接组件,使用了 yii\db\Connection 类来表示数据库连接;cache 是一个缓存组件,使用了 yii\caching\FileCache 类来表示文件缓存。

通过在代码中使用 Yii::$app->db 和 Yii::$app->cache,我们可以在整个应用程序中访问和使用这两个组件的功能。

总结:components 是 Yii2 框架中用于配置和管理应用程序组件的关键部分,底层原理是通过配置文件中的数组定义来实例化和注册这些组件,并通过依赖注入实现组件之间的耦合。

  • 回复于 2023-08-30 14:54 举报

    欢迎使用店滴 cms(ddiot)

    在这里插入图片描述

    店滴云,让经营场所,更智能。围绕茶室、酒店、健身房、公寓、出租房等经营性场所进行物联网改造。同时支持多种物联网通信协议,开放智能门锁,智能开关,智能手环的sdk供开发者使用。

    官方地址

    店滴云官网
    官方开源库
    cms源码

    开发者参与

    qq群

    :823429313,点击可直接加入:开发者交流群

    微信公众号

    在这里插入图片描述

    特性

    • 使用稳定的 YII 框架,优化处理开发过程,开发体验如 tp 一样顺滑。
    • 支持多层权限管控,路由权限,数据权限,菜单权限,集团权限,商户权限,扩展功能权限随意搭配调度
    • 基于 swoole 协程化,定时任务调度,im 聊天环境支持,系统接口支持协程,应对高并发
    • 开源百度 ai 接口对接,完成人脸库维护,人脸库创建,人脸库在线识别,人脸会员建立
    • 多模块可安装,便于迅速扩展业务,支持横向纵向双向扩展业务需求
    • 后台支持多种开发模式,php 混合开发,element-ui 的 vue 开发模式,纯 html 的传统开发都支持
    • 表单多样,除 yii 自身的表单组件,系统还对表单做了丰富,支持一句话配置万能表单
    • gii代码自动生成,包括扩展模块,数据库模型,检索模型,控制器和接口都可以自动生成
    • element-ui+uniapp+店滴cms,中后台,多端兼容,数据处理全部支持且开源

    环境准备:

    php>=7.3
    redis
    git 工具下载:https://git-scm.com/downloads
    composer https://www.phpcomposer.com/
    composer建议使用阿里镜像 https://developer.aliyun.com/composer
    

    第一步:git 下载代码

    git clone https://toscode.gitee.com/wayfirer/ddicms.git
    
    

    第二步:更新 composer 扩展

    cd 你的文件路径
    composer update
    
    

    第三步:建立数据库并完成配置

    cd common\config
    
    vim common\config\main-local.php
    
    
    <?php
    
    /**
     * @Author: Wang Chunsheng 2192138785@qq.com
     * @Date:   2020-03-12 20:12:31
     * @Last Modified by:   Wang chunsheng  email:2192138785@qq.com
     * @Last Modified time: 2021-04-09 18:25:50
     */
    
    return [
        'components' => [
            'db' => [
                'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=localhost;dbname=netos',
                'username' => 'root',
                'password' => 'root',
                'charset' => 'utf8',
                'attributes'  => [
                    PDO::ATTR_STRINGIFY_FETCHES => false,
                    PDO::ATTR_EMULATE_PREPARES  => false,
                ],
            ],
            'mailer' => [
                'class' => 'yii\swiftmailer\Mailer',
                'viewPath' => '@common/mail',
                // send all mails to a file by default. You have to set
                // 'useFileTransport' to false and configure a transport
                // for the mailer to send real emails.
                'useFileTransport' => true,
            ],
        ],
        'language' => 'zh-CN',
    
    ];
    
    
    make distclean
    
    phpize && \
    ./configure  --with-php-config=/www/server/php/74/bin/php-config  \
    --enable-openssl \
    --with-openssl-dir  \
    --enable-swoole-curl  \
    --enable-http2 && \
    make && sudo make install
    
    
    
    
    

    Nginx 部署配置

    首先解析网站到 frontend\web,然后配置 nginx 如下:

    server {
            listen        80;
            server_name  www.ai.com;
            root   "*/firetech/frontend";
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Headers X-Requested-With,Authorization,Content-Type,access-token,bloc-id,store-id;
            add_header Access-Control-Allow-Methods GET,POST,OPTIONS,DELETE,PUT;
    
            location /api {
                index index.php index.html;
                if (!-e $request_filename)
                {
                    rewrite ^/api/(.*)$ /api/index.php last;
                }
                if (!-f $request_filename){
                    set $rule_0 1$rule_0;
                }
            }
    
            location /admin {
                index index.php index.html;
                if (!-e $request_filename)
                {
                    rewrite ^/admin/(.*)$ /admin/index.php last;
                }
            }
    
            location / {
                proxy_http_version 1.1;
                proxy_set_header Connection "keep-alive";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header SERVER_NAME $server_name;
                if (!-e $request_filename) {
                    proxy_pass http://127.0.0.1:9501;
                }
            }
    }
    
    
    

    特别鸣谢

    感谢以下的项目,排名不分先后

您需要登录后才可以回复。登录 | 立即注册