当前位置: 美高梅集团手机版 > 美高梅集团 > 正文

从简单的模板去使用目录的结构,框架安装完成

时间:2020-02-05 16:14来源:美高梅集团
当 Yii框架仍处于 RC阶段时,我们对它进行过报道,那时它刚刚全面达到候选版本阶段,我们感觉是时候再次讨论这个话题:选择Yii框架的原因。 Yii2 框架 之所以称之为高效快速开发的

当 Yii框架仍处于 RC阶段时,我们 对它进行过报道,那时它刚刚全面达到候选版本阶段,我们感觉是时候再次讨论这个话题:选择 Yii框架的原因。

Yii2 框架 之所以称之为高效快速开发的一款框架,是因为有一个神奇的工具Gii

1. 易于安装

用过Yii1框架的Coder都知道,Gii可以为你快速生成代码,也就是说搭建一个可以增删改查的WebApp可能一行代码都不用写。

对于web开发人员来说,时间就是金钱,没有人愿意把宝贵的时间花在一个复杂的安装和配置过程。

当然作为Coder,不写代码怎么能实现我们想要的功能呢。

安装处理使用Composer。如果你想要描述安装的过程,Sitepoint最近发表了一篇很棒的文章,在这儿。我倾向于使用基本的应用程序模板,即使我的网站有一个单独的前端和后端组件。相反,我选择使用一个模块给我的网站的后台部分。(Yii模块是最好的描述,小应用驻留在主应用程序里面)。

上次介绍了如何安装Yii框架,本次介绍一下如何使用gii工具快速实现CRUD功能。

注意:许多目录的引用在后面的示例中,从简单的模板去使用目录的结构。

框架安装完成后可以通过如下链接访问Gii工具

2. 利用现代技术

Yii是一种纯粹的面向对象框架,并且利用PHP的一些更高级的功能,包括延迟静态绑定,SPL类和接口,和匿名函数。

Yii2的Gii工具使用了Bootstrap,对比Yii1看起来漂亮了许多。

所有的类名称空间,它允许你利用PSR-4兼容的自动装载器。这意味着包括Yii 的 HTML的帮助类一样的简单:

yii2框架提供的生成工具有6个:Model,CRUD,Controller,Form,Module,Extension

use yiihelpersHtml;

我安装了一个yii2-kartikgii插件,此插件是用来生成Kartik模式的CRUD方法的。

Yii 也允许你定义别名来帮助简化你的命名空间。 在上面的示例中, use 语句将加载一个类定义,默认放的目录 /vendor/yiisoft/yii2/helpers. 这个别名在BaseYii 类在第79行中定义:

本次就拿Kartik Crud配合默认生成工具来讲解。

public static $aliases = ['@yii' => __DIR__];

如果你想实现应用模块化, 那么Module Generator能帮助到你。点击Module Generator生成模块

框架本身的安装使用Composer,是其扩展。 甚至出版的过程扩展一样容易创建自己的 composer.json,并在Github托管代码,列出您的扩展在Packagist。

生成一个名为“user”的模块

3. 高度可扩展性

点击Preview会看到Gii会帮助我们生成三个文件,可以点击链接预览代码。

Yii 看起来就像一件样式很棒的西装,但也非常容易根据你的需求来进行定制. 实际上框架的每一个组件都是可以扩展的。一个简单的示例就是添加一个唯一的主体ID到你的视图上。 (你如果对自己为什么可能会想要这样做感兴趣的话,可以看看这篇 文章).

点击Generate生成代码。

首先,我会在我的 appcomponents 目录相面创建一个名为 View.php 的文件, 并加入如下代码:

代码生成完毕,需要配置文件backend/config/main.php,把模块添加到应用里。

namespace appcomponents; class View extends yiiwebView { public $bodyId; /* Yii allows you to add magic getter methods by prefacing method names with "get" */ public function getBodyIdAttribute() { return  ? '' : ''; } }

然后,在我的主布局文件 (appviewslayoutsmain.php) 中,我会将如下代码添加到我的HTML中body标签的里面:

This is the view content for action "index". The action belongs to the controller "backendmodulesuser澳门美高梅游戏,controllersDefaultController" in the "user" module.

BodyIdAttribute?>>

You may customize this page by editing the following file:

美高梅集团手机版,而最后,我会加下列的代码添加到我的主配置文件中,以便让Yii知道如何去使用我扩展的视图类,而不是它自己默认的那个类:

D:WAMPwwwyii2testbackendmodulesuserviewsdefaultindex.php

return [ // ... 'components' => [ // ... 'view' => [ 'class' => 'appcomponentsView' ] ]];

这个界面内容访问的是模块user下的defaultController执行的是index这个action。

4. 鼓励测试

你可能需要自定义这个页面通过修改模块下的views文件index.php

Yii 框架和Codeception框架紧密地集成在一起。 Codeception 是一个优秀的PHP测试框架,它帮助简化创建单元测试、功能验收测试的流程。 条件是你在为所有的应用程序编写自动化的测试用例,对吧?

模型的生成首先得配置数据库配置文件,路径:yii2test/common/config/main-local.php。

Codeception 扩展使得在测试时配置应用程序变得简单。 测试应用程序,只需编辑一个已存在的文件/tests/_config.php。例如:

配置好数据库,我们使用Model Generator来生成对应的模型。

return [ 'components' => [ 'mail' => [ 'useFileTransport' => true, ], 'urlManager' => [ 'showScriptName' => true, ], 'db' => [ 'dsn' => 'mysql:host=localhost;dbname=mysqldb_test', ], ],];

yii2会读取数据库中的表,如果数据库中没有user这个表。是无法读取数据库字段自动生成代码的。

使用上面的配置,需要注意下面一些事项:

这里注意填写namespace,带有路径的指定到模块user下的models。

在功能验收测试期间,所有发送的邮件都会被写入一个文件中保存,而非真正地发送出去。 测试时URL的格式是index.php/controller/action,而非/controller/action。 测试时需要使用测试数据库,而非生产数据库。

建议勾选 Enable I18N,可以国际化WebApp。点击Generate生成代码。

Codeception 内部存在一个特殊的模块,专门用于Yii 框架测试。 它在TestGuy类里添加了一些方法,保证功能测试时 Active Record可以正常工作。 例如,如果你想查看注册表单是否成功地创建了一个用户名为testuser的User对象,你可以这样做:

这里我使用的是插件yii2-kartikgii。关于yii2-kartikgii的安装和使用参照《Yii2 插件kartikgii》

$I->amOnPage;$I->fillField('username', 'testuser');$I->fillField;$I->click;$I->seeRecord('appmodelsUser', array);

下面来使用Kartik CRUD Generator来生成CRUD方法

5. 简化的安全方案

需要注意的是Model Class、Search Model Class、Controller Class都需要配置路径指定到相应模块;Model ID是user。

安全性是任何web应用的重要组成部分,幸运的是Yii有许多很棒的特性能帮你减轻负担.

点击Generator会生成8个可选的文件。主要是生成UserControler和View文件。

Yii 带来了一个安全性 应用程序组件,它暴露了一些可以帮助可以用来创建一个更加安全的应用程序的方法. 其中一些相对而言更加有用的方法有:

经过上面三步。我们不经意间就完成了MVC。那么我们看看自动生成的代码为我们展现出来的有什么信息。

generatePasswordHash: 从一个密码和一个随机的盐值生成一个安全的哈希值. 这个方法会为你创建一个随机的盐值,然后使用PHP的 crypt 函数来根据所提供的字符串创建一个哈希值.

validatePassword: 这是一个可以同 generatePasswordHash 搭配使用的方法, 并可以让你检查用户提供的密码是否同你存储的哈希值匹配.

此页面访问的是模块user下的user数据表模型CRUD方法。代码生成时候默认显示了表中的5个字段。使用的是Kartikgii插件。对比框架自带的CRUD方法生成的界面相对漂亮些。把表格放在bootstrap

generateRandomKey: 可逆让你创建一个任何长度的随机字符串

  • panel标签下。并且添加了导出表格、重置表格等功能。

Yii 会自动对所有非安全 HTTP 请求方法 的可用CSRF令牌进行检查, 并将在你使用 ActiveForm::begin() 方法创建你的开发表单标签时生成并输出一个令牌值. 这个特性可以通过编辑你的主配置文件,包含下面的代码来禁用:

至此我们只是简单的配置了下config文件,没有编写一行代码。就实现了WebApp对数据表的操作功能。

 return [ 'components' => [ 'request' => [ 'enableCsrfValidation' => false, ] ];

Yii框架是不是很强大,很好用呢。至于我们对表怎么操作,完全可以自定义。后续就可以投入代码编写中了。

为了堤防跨站脚本XSS的攻击,Yii提供了另外一个叫做 HtmlPurifier 的辅助类. 这个类有一个名为 process 的静态方法, 而它将会使用同名的 流行过滤器库 来过滤你的输出.

Yii框架帮助我们缩减了很多代码开发的工作量。可以称之为高效的PHP开发框架。

Yii 也包含了随时就绪的用于用户认证和授权的类. 授权被分成了两个类型: ACF 和RBAC .

编辑:美高梅集团 本文来源:从简单的模板去使用目录的结构,框架安装完成

关键词: