YiiPHP框架入门-第2部分

来自菜鸟教程
跳转至:导航、​搜索

关于 Yii

Yii 是一个高性能的 PHP 面向对象框架,可帮助您快速构建 Web 应用程序。 它的设计方式让您可以专注于使您的应用程序与众不同的原因,同时它会处理更“无聊”的代码定义任务。 它遵循 MVC 模式,将逻辑与表示完全分离,并且具有相当多的安全执行功能。

在本教程中,我们将继续我们上次在 VPS 上安装 Yii 框架并创建我们的第一个应用程序时开始的内容。 如果您还记得,我们还为 URL 清理做了一些配置,并链接了一个 MySQL 数据库以供我们的应用程序使用。

我们现在将继续使用 Yii 提供的一些代码生成工具来为我们的数据建立第一个模型。 然后,我们将生成 CRUD 操作的代码。 最后,我们将看看典型的 Yii 应用程序工作流程是如何工作的。 但首先,让我们在上次连接的数据库中创建一个表来保存一些内容——比如说新闻。

如果您还记得,我们创建的数据库名为 db_tutorial。 让我们进入命令行并在这个数据库中创建一个表。 为了提高你的 SQL 技能,你可以查看这篇关于 在 MySQL 和 MariaDB 中创建和使用表的文章。 所以我们需要一个名为 news 的表,它包含 3 列:id(主要和自动递增)、标题和正文。

如果您赶时间,可以继续使用此命令创建表:

CREATE TABLE news (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
title VARCHAR(256),
body TEXT);

无需填写,我们将使用 Yii 很好地做到这一点。

该模型

CRUD 是 Web 应用程序必须执行的最常见的任务之一。 从数据库中创建、读取、更新和删除数据非常重要,通常您必须自己编写执行这些任务的所有函数。 这就是 Yii 变得有趣的地方。 使用基于 Web 的代码生成器 Gii,我们可以自动创建基本的 CRUD 代码。 那么让我们看看它是如何工作的。

要使用 Gii,首先我们需要启用它。 在位于 protected/config 文件夹中的同一个 main.php 文件中,我们在上一个教程中进行了更改,您会发现需要取消注释的代码块为了启用 Gii:

/*
  'gii'=>array(
    'class'=>'system.gii.GiiModule',
    'password'=>'Enter Your Password Here',
    // If removed, Gii defaults to localhost only. Edit carefully to taste.
    'ipFilters'=>array('127.0.0.1','::1'),
  ),
*/

删除评论并指定您将用于在浏览器中访问 Gii 的密码。 现在,根据您安装应用程序的位置,您还需要更改 ipFilters 参数。 默认情况下,Gii 只能从 localhost 访问。 因此,如果您的服务器是远程服务器,则默认设置将不起作用。 因此,在开发过程中,可以将其设置为 false,然后在完成后将其设置回原来的样子:

'ipFilters'=>false,

或者,您可以设置一个您知道要允许连接的特定 IP 地址。 保存文件并转到您的浏览器。 如果您已按照上一篇文章中有关更清洁 URL 的步骤进行操作,您应该转到:

http://example.com/mysite/gii

如果没有,请访问:

http://example.com/mysite/index.php?r=gii

这应该会提示您输入刚刚指定的密码,然后您应该去查看代码生成选项。 不过,在生成 CRUD 代码之前,我们需要为我们创建的表(news)创建一个模型类。 所以点击模型生成器并按照说明进行操作。 基本上您所要做的就是填写表格名称字段并按Preview。 然后您可以预览代码并单击生成

如果您收到类似“无法写入文件”的错误,请确保 Web 服务器有权在 protected/models 文件夹中写入。 为此,首先通过从终端运行以下命令将文件夹的组所有权分配给 www-data 组(请确保您位于应用程序根文件夹中):

chown root:www-data protected/models

这将使文件夹的所有者成为 root 用户和 www-data 组。 请注意,Apache 作为 www-data 用户在您的站点上运行,该用户是 www-data 组的一部分。 接下来,确保 www-data 组也可以写入该文件夹:

chmod 775 protected/models

CRUD(创建、读取、更新、删除)

所以现在我们有一个用于与 News 表通信的模型类。 让我们快速生成 CRUD 代码以实现其中数据的操作。 返回到之前的 URL (mysite/gii),但这次选择 Crud generator。 在 Model class 字段中指定我们刚刚创建的模型名称(News),然后单击 PreviewGenerate。 但再次确保文件夹 protected/controllersprotected/views 可由服务器写入(如果您不知道 ',请参阅上文如何执行此操作)。

生成 CRUD 代码后,您应该会收到带有链接的成功消息以供试用。 它将带您进入显示 news 表中记录的页面。 由于它是空的,因此您将找不到任何东西。 不过,在右侧,您会看到一个菜单,其中包含一些用于创建和管理新闻的链接。 继续尝试创建、阅读、更新和删除新闻。 在“管理新闻”部分,您甚至可以使用搜索、排序和过滤功能来管理内容——所有这些都是“开箱即用”的。 此外,您甚至可以使用 Gii 生成控制器、表单和模型类,但我们不会在本教程中进行介绍。

应用程序工作流程

现在我们已经看到在应用程序中为数据生成 CRUD 代码是多么容易,让我们了解一下 Yii 请求路由的工作原理。 Yii 实现了模型-视图-控制器 (MVC) 设计模式,以便很好地将逻辑与表示分离。 此外,它使用一个名为 Application 的前端控制器,该控制器收集有关用户请求的信息并将其转发给适当的控制器进行处理。 那么它是怎样工作的? 在不深入所有细节的情况下,以下内容应该可以让您非常清楚地了解:

考虑没有清理的默认 URL 结构(就像我们在上一个教程中所做的那样),假设用户向 http://example.com/mysite/index.php?r=news/view&id=1 . 对于干净的 URL,这将是 http://example.com/mysite/news/1

引导 index.php 脚本实例化 ApplicationurlManager 组件帮助确定请求的控制器及其操作 - 在这种情况下是 news[ X212X](在 NewsController 类中找到)和 view 分别。 应用程序创建请求的控制器的实例,然后执行操作(在本例中为 actionView)。 反过来,该操作从数据库中读取 ID 为 1 的新闻模型,并将其显示在名为 show 的视图中(嵌入到布局中)供浏览器中的用户使用。

这就是它,一种用于路由用户请求的并不少见的 MCV 模式。 有关概述 Yii 应用程序典型工作流程的图表以及所有流程的详细逐步描述,您可以查看 此页面

结论

在本教程中,我们看到了是什么让 Yii 成为如此酷的 PHP 框架。 它使您可以非常轻松地生成模型、控制器,甚至是常规的 CRUD 操作功能,因此您不必担心编写所有这些代码。 你只需要专注于让你的应用程序做你想做的事。

文章提交者:Danny