”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Yii框架快速搭建CRUD应用,PHP高手必备

Yii框架快速搭建CRUD应用,PHP高手必备

发布于2025-04-12
浏览:216

Yii框架:快速构建高效CRUD应用的指南

Yii是一个高性能的PHP框架,以其速度、安全性以及对Web 2.0应用的良好支持而闻名。它遵循“约定优于配置”的原则,这意味着只要遵循其规范,就能编写比其他框架少得多的代码(更少的代码意味着更少的bug)。此外,Yii还提供了许多开箱即用的便捷功能,例如脚手架、数据访问对象、主题、访问控制、缓存等等。本文将介绍使用Yii创建CRUD系统的基础知识。

关键要点

  • Yii是一个高性能框架,适用于Web 2.0应用,提供许多便捷功能,例如脚手架、数据访问对象、主题、访问控制和缓存。它遵循约定优于配置的原则,减少代码量,从而降低bug的可能性。
  • Yii的命令行工具yiic用于创建具有合适目录结构的骨架应用。Yii遵循MVC和OOP原则,URL结构为http://localhost/yiitest/index.php?r=controllerID/actionID。控制器和要调用的方法是根据URL中的ID确定的。
  • Yii的基于Web的工具gii可用于生成模型、控制器和表单,用于CRUD操作,从而快速开发CRUD系统。例如,用户可以对博客文章执行CRUD操作的简单系统可以在几分钟内开发完成。

入门

假设您已经在系统上安装了Apache、PHP(5.1或更高版本)和MySQL,因此第一步是下载框架文件。访问Yii官方网站并下载最新的稳定版本(本文撰写时为1.1.13)。解压ZIP文件以获取文件夹yii-1.1.13.e9e4a0(版本标识符可能因您下载的版本而异),将其重命名为yii,然后将其移动到您的Web可访问根目录。在我的系统中,这是C:\\wamp\\www,因此框架文件的路径将为C:\\wamp\\www\\yii。在本文中,我将其称为,以便即使您的设置不同,您也能轻松地跟随操作。接下来,我们应该检查Yii的哪些功能将受我们的系统支持。在浏览器中访问http://localhost/yii/requirements/以查看框架的要求详细信息。由于我们将使用MySQL数据库,因此您应该启用了MYSQL PDO扩展。

PHP Master | Build a CRUD App with Yii in Minutes

我们希望快速检查Yii的要求,这就是我们将文件放在可访问目录中的原因,但建议将Yii文件保存在Web根目录之外。检查之后,您可以随意将其移动到其他位置。

继续前进

每个Web应用程序都有一个目录结构,Yii应用程序也需要在Web根目录内维护分层结构。要使用合适的目录结构创建骨架应用程序,我们可以使用Yii的命令行工具yiic。导航到Web根目录并键入以下内容:

/framework/yiic webapp yiitest

这将创建名为yiitest的骨架应用程序,其中包含最少必需的文件。在其中,您将找到index.php,它用作入口脚本;它接受用户请求并决定哪个控制器应该处理该请求。Yii基于MVC和OOP原则,因此您应该熟悉这些主题。如果您不熟悉MVC,请阅读SitePoint系列文章《MVC模式和PHP》,它提供了一个很好的介绍。Yii URL看起来像http://localhost/yiitest/index.php?r=controllerID/actionID。例如,在博客系统中,URL可能是http://localhost/yiitest/index.php?r=post/createpost是控制器ID,create是操作ID。入口脚本根据ID决定要调用哪个控制器和方法。ID为post的控制器必须命名为PostController(ID从类名中去除后缀“Controller”并将第一个字母转换为小写)。操作ID是以类似的方式存在的控制器内方法的ID;在PostController中,将有一个名为actionCreate()的方法。可能有多个与控制器关联的视图,因此我们将视图文件保存在protected/views/*controllerID*文件夹中。我们可以在上述目录中为我们的控制器创建一个名为create.php的视图文件,然后只需编写以下代码即可将此视图呈现给用户:

public function actionCreate()
{
    $this->render('create');
}

如有必要,也可以向视图传递其他数据。操作如下:

$this->render('create', array('data' => $data_item));

在视图文件中,我们可以通过$data变量访问数据。视图还可以访问$this,它指向呈现它的控制器实例。此外,如果您想要用户友好的URL,可以在protected/config/main.php中取消注释以下内容:

'urlManager'=>array(    
    'urlFormat'=>'path',
    'rules'=>array(
        '/'=>'/view',
        '//'=>'/',
        '/'=>'/',
    )
)

然后,URL将看起来像http://localhost/yiitest/controllerID/actionID

开发CRUD应用程序

现在您已经了解了重要的Yii约定,是时候开始使用CRUD了。在本节中,我们将开发一个简单的系统,用户可以在其中对博客文章执行CRUD操作(创建、检索、更新和删除)。

步骤1

创建MySQL数据库yiitest,并在其中创建一个名为posts的表。出于本文的目的,该表将只有3列:id、title和content。

CREATE TABLE posts (
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100),
    content TEXT
)

打开应用程序的配置文件(protected/config/main.php)并取消注释以下内容:

'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=yiitest',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
)

testdrive替换为我们的数据库名称,即yiitest。显然,您还应该提供Yii连接所需的凭据。

步骤2

在Yii中,每个数据库表都应该有一个对应类型的模型类CActiveRecord。好处是,我们不必直接处理数据库表。相反,我们可以使用与表的不同行对应的模型对象。例如,Post类是posts表的模型。此类的对象表示来自posts表的一行,并具有表示列值的属性。为了快速生成模型,我们将使用Yii的基于Web的工具gii。此工具可用于生成模型、控制器和表单,用于CRUD操作。要在项目中使用gii,请在应用程序的配置文件中找到以下内容并取消注释它并添加密码。

'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'your password to access gii',  
'ipFilters'=>array('127.0.0.1','::1'),
)

然后使用以下URL访问giihttp://localhost/yiitest/index.php?r=gii。如果您使用的是用户友好的URL,则URL为:http://localhost/yiitest/gii。单击“模型生成器”。gii将询问您表名;为表名输入“posts”,为模型使用名称“Post”。然后单击“生成”以创建模型。

PHP Master | Build a CRUD App with Yii in Minutes

检查protected/models,您将在其中找到文件Post.php

步骤3

现在单击“CRUD生成器”。将模型名称输入为“Post”。控制器ID将自动填充为“post”。这意味着将在PostController.php名称下生成一个新的控制器。单击“生成”。该过程将生成控制器以及用于CRUD操作的几个视图文件。

PHP Master | Build a CRUD App with Yii in Minutes

现在您有了一个全新的CRUD应用程序!单击“立即试用”链接进行测试。要管理帖子,您需要以admin/admin身份登录。要创建新帖子,您需要访问http://localhost/yiitest/post/create,要更新特定帖子,只需将浏览器指向http://localhost/yiitest/post/update/postID即可。同样,您可以列出所有帖子并删除其中一些或全部帖子。

结论

在开发Web 2.0项目方面,Yii非常强大。事实上,我们刚刚看到在短短几分钟内创建功能齐全的CRUD系统是多么容易!显然,Yii可以为您节省大量工作,因为您不必从头开始。Yii为我们提供了基础,我们可以根据需要进行扩展。

(后续的FAQ部分,由于篇幅过长,建议另行整理成单独的文档。)

最新教程 更多>
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-04-19
  • PHP中从MySQL函数迁移到PDO的有效方法
    PHP中从MySQL函数迁移到PDO的有效方法
    [2 从过时的mysql函数迁移以在PHP 旧的MySQL PHP扩展名被弃用并定于删除。 坚固且安全的替代方案是必不可少的,MySQLI和PDO_MYSQL都是可行的选择。 本指南重点介绍迁移到 pdo(php data对象)的优势。 建立PDO连接: 连接到MySQL数据库涉及实例化PDO对...
    编程 发布于2025-04-19
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-04-19
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“检测”中的错误:在功能检测中。”当Face Cascade分类器(即面部检测至关重要的组件)未正确加载时,通常会出现此错误。要解决此问题,必须...
    编程 发布于2025-04-19
  • JavaScript计算两个日期之间天数的方法
    JavaScript计算两个日期之间天数的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    编程 发布于2025-04-19
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-04-19
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 中删除一个频繁的问题时,在与Chrome and IE9中的图像一起工作时,遇到了一个频繁的问题。和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下CSS ID块创建带...
    编程 发布于2025-04-19
  • MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    MySQL中如何高效地根据两个条件INSERT或UPDATE行?
    在两个条件下插入或更新或更新 solution:的答案在于mysql的插入中...在重复键更新语法上。如果不存在匹配行或更新现有行,则此功能强大的功能可以通过插入新行来进行有效的数据操作。如果违反了唯一的密钥约束。实现所需的行为,该表必须具有唯一的键定义(在这种情况下为'名称'...
    编程 发布于2025-04-19
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-04-19
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-04-19
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-04-19
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-04-19
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示 仅通过Python的MlStripper 来简化剥离过程,Python Standard库提供了一个专门的功能,MLSTREPERE,MLSTREPERIPLE,MLSTREPERE,MLSTREPERIPE,MLSTREPERCE,MLST...
    编程 发布于2025-04-19
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-04-19
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-04-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3