`
dcj3sjt126com
  • 浏览: 1879438 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Yii Framework 基础,快速入门

    博客分类:
  • YII
阅读更多

使用Yii来建立简单的CMS

此教程描述了使用Yii开发一个演示CMS的过程。此CMS同时可以在Yii发布包里找到。它详细讲解了开发中的每个步骤,这些步骤可能同样适用于其他Web应用的开发。作为对Yii指南和类参考 的补充, 此教程旨在展示Yii的实际使用,而不是详尽具体的使用说明。

读者不需要预先了解关于Yii的知识,但具备基本的面向对象编程(OOP)和数据库编程知识会使读者更容易理解此教程。

更多

通过Yii Framework 基础您应该撑握了Yii的基础搭建,本CMS基于Yii生成的基础框架下进行开发,尽量让刚接触Yii的新手们有系统的熟悉如何基于Yii Framewrok下开发应用,同时本教程之内容是作者在学习过程中积累的心得,请尊重我们的劳动成果,如有任何错误欢迎指正!同时我们由基础开发到简单的性能优化,为你讲解如何让Yii在生产环境中更安全,效率更高!

Yii Framework 是一个高度可扩展的架构,本教程只从最基本的功能实现出发,希望令读者对Yii Framewrok有初步了解,除了能实现搭建起基本架构外,Yii提供的API足已令您实现无限的功能,学习Yii的途径只有一个,多看手册,多查询!

 

 

 

Yii 是什么

Yii 是一个基于组件的高性能 PHP 框架,用于快速开发大型 Web 应用。它使Web开发中的 可复用度最大化,可以显著提高你的Web应用开发速度。Yii 这个名字(读作易(Yee) 或 [ji:])代表 简单(easy), 高效(efficient) 和 可扩展(extensible).

环境需求

要运行一个 Yii 驱动的 Web 应用,你需要有一个支持 PHP 5.1.0 或以上版本的 Web 服 务器。

对于打算使用 Yii 的开发者来说,懂得面向对象编程(OOP)会非常有帮助。因为 Yii 是一 个纯 OOP 的框架。

Yii 最适合用来做什么?

Yii 是一个通用的 Web 编程框架,可以用于开发几乎所有的 Web 应用。由于它是轻量级的 且具备了成熟的缓存解决方案,它特别适用于开发高流量的应用,例如门户,论坛,内容管理系 统(CMS),电子商务系统等等。

Yii 跟其他框架比较起来情况如何?

和多数PHP框架类似,Yii 是一个 MVC 框架。

Yii 以其优异的性能,丰富的功能和清晰的文档胜出其他框架。Yii 从一开始就仔细设计以 适合严禁的 Web 应用开发。它既不是一个其他项目的衍生品,也不是一个第三方工作的组合。 它是作者丰富的 Web 应用开发经验和对大多数流行的 Web 编程框架与应用的研究与思考的成果。

 

 

 

安装Yii Framwrok

Yii 的安装由如下两步组成:

  1. 下载 Yii 框架。
  2. 将 Yii 压缩包解压至一个 Web 可访问的目录。

提示: 安装在 Web 目录不是必须的,每个 Yii 应用都有一个入口脚本,只有它才必须暴露给 Web 用户。其它 PHP 脚本(包括 Yii)应该保护起来不被 Web 访问,因为它们可能会被黑客利用。

需求

安装完 Yii 以后你也许想验证一下你的服务器是否满足使用 Yii 的要求,只需浏览器中输入如下网址来访问需求检测脚本:

http://hostname/path/to/yii/requirements/index.php

Yii 的最低需求是你的 Web 服务器支持 PHP 5.1.0 或更高版本。Yii 在 Windows 和 Linux 系统上的 Apache HTTP 服务器 中测试通过,应该在其它支持 PHP 5 的 Web 服务器和平台上也工作正常。

 

 

建立第一个 Yii 应用

为了对 Yii 有个初步认识,我们在本节讲述如何建立第一个 Yii 应用。我们将使用 yiic (命令行工具)创建一个新的 Yii 应用。Gii(强大的基于web的代码生成器)为特定的任务完成自动代码生成。假定 YiiRoot 为 Yii 的安装目录,WebRoot 是服务器的文档根目录。

在命令行运行 yiic,如下所示:

注意:在 MacOS、Linux 或 Unix 系统中运行 yiic 时,你可能需要修改 yiic 文件的权限使它能够运行。此外,也可以这样运行此工具:

% cd WebRoot
% php YiiRoot/framework/yiic.php webapp testdrive

这将在 WebRoot/testdrive 目录下建立一个最基本的 Yii 应用。这个应用拥有了大多数 Yii 应用所需要的目录结构。

不用写一行代码,我们可以在浏览器中访问如下 URL 来看看我们第一个 Yii 应用:

http://hostname/testdrive/index.php

正如我们看到的,这个应用包含三个页面:首页、联系页、登录页。首页展示一些关于应用和用户登录状态的信息,联系页显示一个联系表单以便用户填写并提交他们的咨询,登录页允许用户先通过认证然后访问已授权的内容。 查看下列截图了解更多:

首页
联系页
输入错误的联系页
提交成功的联系页
登录页

下面的树图描述了我们这个应用的目录结构。请查看约定以获取该结构的详细解释。

testdrive/
   index.php                 Web 应用入口脚本文件
   index-test.php            功能测试使用的入口脚本文件
   assets/                   包含公开的资源文件
   css/                      包含 CSS 文件
   images/                   包含图片文件
   themes/                   包含应用主题
   protected/                包含受保护的应用文件
      yiic                   yiic 命令行脚本
      yiic.bat               Windows 下的 yiic 命令行脚本
      yiic.php               yiic 命令行 PHP 脚本
      commands/              包含自定义的 'yiic' 命令
         shell/              包含自定义的 'yiic shell' 命令
      components/            包含可重用的用户组件
         Controller.php      所有控制器类的基础类
         Identity.php        用来认证的 'Identity' 类
      config/                包含配置文件
         console.php         控制台应用配置
         main.php            Web 应用配置
         test.php            功能测试使用的配置
      controllers/           包含控制器的类文件
         SiteController.php  默认控制器的类文件
      data/                  包含示例数据库
         schema.mysql.sql    示例 MySQL 数据库
         schema.sqlite.sql   示例 SQLite 数据库
         testdrive.db        示例 SQLite 数据库文件
      extensions/            包含第三方扩展
      messages/              包含翻译过的消息
      models/                包含模型的类文件
         LoginForm.php       'login' 动作的表单模型
         ContactForm.php     'contact' 动作的表单模型
      runtime/               包含临时生成的文件
      tests/                 包含测试脚本
      views/                 包含控制器的视图和布局文件
         layouts/            包含布局视图文件
            main.php         所有视图的默认布局
            column1.php      使用单列页面使用的布局
            column2.php      使用双列的页面使用的布局
         site/               包含 'site' 控制器的视图文件
            pages/           包含 "静态" 页面
               about.php     "about" 页面的视图
            contact.php      'contact' 动作的视图
            error.php        'error' 动作的视图(显示外部错误)
            index.php        'index' 动作的视图
            login.php        'login' 动作的视图
         system/             包含系统视图文件

 

连接到数据库

大多数 Web 应用由数据库驱动,我们的测试应用也不例外。要使用数据库,我们首先需要告诉应用如何连接它。修改应用的配置文件 WebRoot/testdrive/protected/config/main.php 即可,如下所示:

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString'=>'sqlite:protected/data/source.db',
        ),
    ),
    ......
);

提示:上面的代码告诉 Yii 应用在需要时将连接到 SQLite 数据库 WebRoot/testdrive/protected/data/testdrive.db 。注意这个SQLite 数据库已经包含在我们创建的应用框架中。数据库只包含一个名为 tbl_user 的表:

CREATE TABLE tbl_user (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    username VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(128) NOT NULL
);

若你想要换成一个 MySQL 数据库,你需要导入文件 WebRoot/testdrive/protected/data/schema.mysql.sql 来建立数据库。

注意:要使用 Yii 的数据库功能,我们需要启用 PHP 的 PDO 扩展和相应的驱动扩展。对于测试应用来说,我们需要启用 php_pdo 和 php_pdo_sqlite 扩展。

 

 

实现 CRUD 操作

激动人心的时刻来了。我们想要为刚才建立的 tbl_user 表实现 CRUD (create, read, update 和 delete) 操作,这也是实际应用中最常见的操作。我们无需麻烦地编写实际代码,这里我们将使用 Gii —— 一个强大的基于Web 的代码生成器。

信息:Gii 自版本 1.1.2 可用。在此之前,可以使用 yiic 来实现相同的功能。更多细节,请参考 用 yiic shell实现 CRUD 操作。

配置Gii

为了使用 Gii,首先需要编辑文件 WebRoot/testdrive/protected/main.php,这是已知的 应用配置 文件:

return array(
    ......
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
 
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'pick up a password here',
        ),
    ),
);

然后,访问 URL http://hostname/testdrive/index.php?r=gii。这里我们需要输入密码,它是在我们在上面的配置中指定的。

生成 User 模型

登陆后,点击链接 Model Generator。它将显示下面的模型生成页面,

CRUD Generator

在 Model Class 输入框中,输入 User。在 Controller ID 输入框中,输入 user (小写格式)。现在点击 Generate 按钮后的 Preview 按钮。CRUD 代码生成完成了。

在 Table Name 输入框中,输入 tbl_user。在 Model Class 输入框中,输入 User。然后点击 Preview 按钮。这里将展示将要生成的新文件。现在点击 Generate 按钮。一个名为 User.php 将生成到 protected/models 目录中。如我们稍后描述的, User 模型类允许我们以面向对象的方式来访问数据表 tbl_user 。

生成 CRUD 代码

在创建模型类之后,我们将生成执行 CRUD 操作的代码。我们选择 Gii 中的 Crud Generator,如下所示,

CRUD Generator

在 Model Class 输入框中,输入 User。在 Controller ID 输入框中,输入 user (小写格式)。现在点击 Generate 按钮后的 Preview 按钮。CRUD 代码生成完成了。

访问 CRUD 页面

让我们看看成果,访问如下 URL:

http://hostname/testdrive/index.php?r=user

这会显示一个 tbl_user 表中记录的列表。

点击页面上的 Create User 链接,如果没有登录的话我们将被带到登录页。登录后,我们看到一个可供我们添加新用户的表单。完成表单并点击 Create 按钮,如果有任何输入错误的话,一个友好的错误提示将会显示并阻止我们保存。回到用户列表页,我们应该能看到刚才添加的用户显示在列表中。 重复上述步骤以添加更多用户。注意,如果一页显示的用户条目太多,列表页会自动分页。

如果我们使用 admin/admin 作为管理员登录,我们可以在如下 URL 查看用户管理页:

http://hostname/testdrive/index.php?r=user/admin

这会显示一个包含用户条目的漂亮表格。我们可以点击表头的单元格来对相应的列进行排序,而且它和列表页一样会自动分页。

实现所有这些功能不要我们编写一行代码!

用户管理页
新增用户页

 

 

 

分享到:
评论

相关推荐

    Java源码ssm框架的房屋租赁系统-合同-毕业设计论文-期末大作业.rar

    本项目是一个基于Java源码的SSM框架房屋租赁系统,旨在为房屋租赁市场提供一个便捷、高效、安全的管理平台。系统主要功能包括房屋信息管理、租赁合同管理、租金收取管理、租客信息管理等。通过该系统,房东可以轻松发布房屋信息,管理租赁合同和租金收取,而租客则可以方便地查找合适的房源,提交租赁申请,签订电子合同,并进行租金支付。系统采用SSM框架(Spring、Spring MVC、MyBatis)进行开发,确保了系统的稳定性和扩展性。Spring框架负责依赖注入和业务逻辑管理,Spring MVC处理前端请求和页面展示,MyBatis则用于数据库操作。项目还集成了权限管理、日志记录等模块,提升了系统的安全性和可维护性。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。

    MDM Bypasser Tool激活锁并保存数据工具

    MDM Bypasser Tool激活锁并保存数据工具 绕过 iPhone 上的 iCloud 激活锁并保存您的数据。

    OC-Dialect线上多语言(多列表) 3.SDK每个方法解析

    OC-Dialect线上多语言(多列表) 3.SDK每个方法解析

    数学实验中MATLAB的应用技巧与实例解析

    内容概要:本文档围绕数学实验的MATLAB应用进行了详细介绍,涵盖了基本的四则运算、含有三角函数和指数函数的复杂运算、向量及其多种类型的运算方法(包括数乘、加减及点积计算)、不同方式实现的数的阶乘(普通脚本函数、递归函数以及直接利用MATLAB内置函数)和矩阵的基本及高级运算等多个方面的内容。每个部分都有25道练习题目帮助理解。 适合人群:面向对MATLAB感兴趣的学习者和有一定编程基础的研究者。 使用场景及目标:通过一系列具体的数学实验和编程训练,加深对于MATLAB这一强大科学计算工具的认识与掌握程度,能够灵活运用各种基本函数解决实际问题。 阅读建议:随着教程逐步深入,读者应在电脑上跟随指南亲自操作,以便更好地理解决定思路与具体步骤,将理论转化为实操能力。

    Java源码ssm框架汽车在线销售系统-毕业设计论文-期末大作业.rar

    本项目是一个基于Java源码的SSM框架汽车在线销售系统,旨在为汽车销售行业提供一个便捷、高效的在线交易平台。系统采用了Spring、Spring MVC和MyBatis三大框架技术,实现了前后端的分离与高效交互,确保了系统的稳定性和可扩展性。主要功能包括用户注册与登录、汽车信息展示、在线购车、订单管理、支付系统以及客户服务等。用户可以通过系统浏览各类汽车信息,进行在线咨询和购买,系统提供了详细的车型介绍、价格以及用户评价等信息,帮助用户做出更为明智的购车决策。订单管理模块允许用户查看和管理自己的购车订单,支付系统则支持多种支付方式,确保交易的安全与便捷。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。

    小学数学游戏教学法中的常见问题及解决措施

    内容概要:本文围绕小学数学课程采用游戏教学法存在的若干问题展开讨论。作者详细列举了游戏内容偏离教学目标、游戏设计创新不足、游戏时间和难度不合理及选材不合适等问题,随后针对这些问题从学校管理、教师自主设计游戏、游戏规则制定及优化等多个维度提出了切实可行的解决策略。 适用人群:小学教师、教研员、教育行政管理人员。 使用场景及目标:适用于希望通过改进游戏化教学提升学生学习兴趣和效果的小学数学教育工作者,旨在解决现行小学数学游戏中遇到的具体难题。 其他说明:该文章不仅指出了当下小学数学游戏教学中普遍存在的缺陷,同时也为教育从业者提供了科学合理的改进思路与操作指南,对于推动数学游戏化教学的发展具有积极的意义。

    化学工程中无约束优化数值实验及参数估计研究

    内容概要:本文探讨了两个无约束优化问题及其相关数值实验。首先讨论了一阶反应动力学的参数估计问题,涉及线性常微分方程组的解及其与实验数据的最佳拟合。其次,详细分析了一个复杂的无约束优化问题,提供了多种求解方法(基本牛顿法、信赖域法、拟牛顿法)的结果和比较,旨在评估不同算法的性能。最后,作者对实验过程中遇到的问题及解决方案进行了总结,并分享了对无约束最优化算法的理解。 适用人群:适用于化学工程、数学建模和优化领域的研究人员及学生。 使用场景及目标:用于理解和应用各种无约束优化算法,提高科研工作者和学生的算法选择能力和实际操作经验。 其他说明:文中引用了多部权威教材和技术手册,如《数学规划基础》和《非线性规划:概念、算法及化工过程的应用》,为理论背景提供了可靠依据。此外,还提供了详细的数值实验步骤和算法实现细节,便于读者复现和深入研究。

    2024跨年烟花代码html/烟花代码大全html/跨年烟花源代码html(带音效)

    2024跨年烟花代码html/烟花代码大全html/跨年烟花源代码html【带音效】 效果演示https://www.lmtaolu.cn/biaobai/xkyanhua/ 跨年烟花代码html编程【过年放烟花特效代码+带音效】 新年烟花代码(纯js和html)可以随时嵌入项目的新年烟花代码,复制即可运行。 2024跨年烟花代码html/烟花代码大全html/跨年烟花源代码html【带音效】

    第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip

    第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码.zip,基于以上任务,我选择使用3个openart mini来解决。其中art1摄像头负责A4坐标纸的识别以及图像分类任务;art2负责校准车的位置;art3负责无框卡片的搜寻。任务的不同,三个art的位置和镜头也有所不同。art1位置最低,使得A4纸点坐标识别特别精准;同时art1镜头装配偏振片,减少因为比赛场地出现强光对图像分类造成影响;art2位置最高同时使用广角镜头,目的是增大视野范围,即使车的定位比较偏也足矣找到卡片并进一步校准;art3使用130°大角度镜头,同时倾斜放置,增大视野范围,能够以最快速度遍历全图。下面将详细讲解各个任务的实现细节。 第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明

    欧姆龙CP1H+CIF11与施耐德ATV变频器通讯程序 功能:原创程序,可直接用于现场程序 欧姆龙CP1H的CIF11通讯板,实现对施耐德ATV12变频器 设定频率,读取实际频率,变频器状态功能

    欧姆龙CP1H+CIF11与施耐德ATV变频器通讯程序 功能:原创程序,可直接用于现场程序。 欧姆龙CP1H的CIF11通讯板,实现对施耐德ATV12变频器 设定频率,读取实际频率,变频器状态功能。 反应灵敏,通讯稳定可靠。 非常灵活方便。 同时解决了施耐德变频器断电重启后,自准备过程,无需人为再准备。 器件:欧姆龙CP1H,CP1W CIF11串口网关板,1台施耐德ATV12变频器,昆仑通态TPC7062KD触摸屏。 说明:是程序,带注释,带变频器手册,接线,参数设置都提供。 通讯稳定可靠,实用有效。

    教育技术学《Web应用开发》课程期末考查作品详细要求与指导

    内容概要:本文档详细介绍了教育技术学2021级《Web应用开发》课程期末考查的作品要求,主要涉及创建一个具有教育功能的动态网站,涵盖项目结构设计、用户界面展示、登录管理、用户和内容管理、日志记录等多个方面,以及详细的评分标准。 适合人群:针对教育技术学2021级的学生,尤其是修读《Web应用开发》课程的同学。 使用场景及目标:用于指导学生进行课程项目的选题与开发,确保项目符合教学目标和评分标准,最终完成高质量的作品并获得好的成绩。 阅读建议:仔细阅读每一条要求和评分细则,结合个人兴趣选定独特的教育主题,在规定的时间节点完成各项开发任务,并严格按照规范打包提交。建议边开发边测试,及时发现并解决问题。

    通用verilog串口控制器: 1.无奇偶校验,通过高低温等实验稳定运行,可靠性强,方便移植 2.提供整体工程,仿真,提供

    通用verilog串口控制器: 1.无奇偶校验,通过高低温等实验稳定运行,可靠性强,方便移植。 2.提供整体工程,仿真,提供。

    ST traction inverter

    ST traction inverter

    考务管理-JAVA-基于springBoot考务管理系统的设计与实现

    1. 用户管理 用户注册与登录:支持学生、教师及管理员通过邮箱或身份证号码注册和登录。 角色权限管理:根据用户类型(如学生、教师、管理员)设置不同的权限,确保信息安全与隐私保护。 2. 考试信息管理 考试安排管理:管理员可以创建、修改和删除考试安排,包括考试时间、地点、科目等信息。 考生信息录入:记录每位考生的基本信息,如姓名、学号、班级、联系方式等。 3. 考试报名 在线报名系统:学生可以在线选择所需报考的科目并进行报名,系统实时更新可用名额。 报名状态查询:学生可以查看自己的报名状态,包括已报名、待审核、审核通过等信息。 4. 考试资源管理 试题库管理:系统支持上传、编辑和分类各种类型的试题,方便后续调取与使用。 试卷生成:根据设定的规则和标准,从试题库中自动生成试卷,并生成PDF文件供打印。 5. 考试监控与管理 考场安排:管理员可以根据考生人数和考场数量合理安排考场,并分配监考老师。 监考记录:监考人员可在系统上记录考生的出勤情况以及考试中的违规行为。 6. 成绩管理 成绩录入:教师可在系统内录入考生的考试成绩,支持批量导入和手动输入。 成绩查询:学生可随时查询个人的考试成绩,

    实验教学资料:深入理解HTTP协议的应用及其各部分组成

    内容概要:该文档详细讲解了HTTP协议的概念以及其实现方式,包括HTTP协议的基本构成(GET/POST请求方法的区别、响应代码解读),并通过实验的形式探讨HTTP无状态特性以及cookie和session的作用和原理。通过具体实验步骤引导读者掌握HTTP Cookie, session, Authorization(授权)和cache(高速缓存)的知识点。此外,文档还通过实例讲解了HTTP响应的不同部分(Date, Content-Length, Content-Type等首部含义)。 适合人群:适用于希望深入了解和掌握HTTP协议的高年级本科生或者IT行业的技术人员。 使用场景及目标:通过实际的操作,帮助学习者更加直观地理解HTTP协议的工作机制,加深理论知识的理解,能够更好地应用于网络应用程序的设计与优化。 其他说明:为了达到最好的学习效果,推荐结合Wireshark软件来捕捉和分析网络流量,以实践验证理论知识点。在实验过程中,可以重点关注不同请求与响应之间的关系及其背后的机制。

    rabinovich_3dj_01_230116.pdf

    rabinovich_3dj_01_230116

    微信小程序源码-在线投稿系统-微信端-毕业设计源码-期末大作业.zip

    本项目是一个基于微信小程序的在线投稿系统,旨在为校园内的学生、教师及外部作者提供一个便捷、高效的投稿平台。系统主要功能包括用户注册与登录、稿件提交、稿件审核、通知反馈以及作者后台管理等。用户可以通过小程序界面直接提交稿件,包括文本、图片和附件等形式,系统后台会对提交的内容进行审核,审核结果将通过微信通知及时反馈给作者。此外,管理员可以在后台管理系统中查看所有提交的稿件,并进行审核操作,确保稿件质量。 项目采用前后端分离的开发模式,前端使用微信小程序原生框架,确保良好的用户体验和流畅的操作。后端采用Node.js搭建,使用Express框架处理业务逻辑,数据库则使用MongoDB存储用户数据和稿件信息。项目的开发不仅提升了校园内外的投稿效率,也为学生提供了一个实践技术、锻炼能力的平台。

    君正lngenicT31芯片资料

    T31芯片

    FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真 vivado ise quartus软件均可以,匹配滤波器系数生成等 含说明 doc,电子ZL出不 ,这

    FPGA实现 CIC抽值滤波 滤波器 verilog 仿真和matlab simulink仿真 vivado ise quartus软件均可以,匹配滤波器系数生成等 含说明 doc,电子ZL出不 ,这个需要一定的数字信号处理知识和熟练操作相应软件,目前还做不到手把手的教,不太熟练的,发vivado工程,一键跑程序得出图1和图3所示

    基于springboot的高校毕业生实习及就业去向信息管理系统源码(java毕业设计完整源码+LW).zip

    该系统从三个对象:由管理员和学生、企业信息来对系统进行设计构建。 主要功能包括:个人信息修改,对系统用户、招聘信息、实习、问卷调查等功能进行管理。 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

Global site tag (gtag.js) - Google Analytics