Yii 2.0

news/2025/2/22 12:45:00/

目录

简介

概述

安装

模型

控制器

视图

小部件

实例

可访问方法

表单


简介

概述

Yii 2.0 需要 PHP 5.4.0+,支持Composer,相比较Yii 1.1属于完全重写的版本。

Yii 2.0中的路径别名必须用@开头,用于区分普通文件目录路径或URL。@Yii指向Yii安装目录。

Yii 2.0视图里的特殊变量$this不再指向当前控制器和小部件,而是指向视图对象。如果要在视图中访问控制器或者小部件,需要用$this->context

Yii 2.0支持SmartyTwig两种模板引擎。

Gii是yii里的一个模块,可用于生成一些Web站点常用功能的代码。

部署Yii2应用到线上时,应该把网站目录设置为应用的Web文件夹。

Yii2的应用主体是服务定位器,它提供了一些具有不同功能的应用组件来处理请求,例如db组件处理数据库相关服务。应用组件就像是全局变量,不应该注册过多,可以在/config/web.php的components配置项中查看Yii2里注册的一些应用组件。

安装

通过Composer安装最新的Yii2稳定版运行指令:

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

本次安装的版本号是2.0.43。

安装完成后切换到应用目录【basic】下,启动PHP内置服务器可使用如下指令:

php yii serve

默认开启的端口号是8080。也可以在如上命令后面用--port参数指定端口号。

然后在浏览器地址栏访问http://localhost:8080/看到如下页面表示安装成功。

 访问http://localhost:8080/index.php?r=gii即可看到如下图所示的gii模块。

模型

yii\base\Model是模型类的基类且与数据表无关。yii\db\ActiveRecord类间接继承了yii\base\Model类并且添加了数据库处理,因此与数据表有关联。

如果模型数据验证【$model->Validate()】失败,可以通过$model->getErrors()获取错误详细信息。

Yii::$app代表了全局可访问的应用实例,能提供requestresponsedb等等特定功能组件。

控制器

使用render方法会自动加载视图布局文件/views/layouts/main.php。

控制器ID show-text 对应的控制器类名是ShowTextController,对应的视图文件夹名称是show-text。

控制器里方法名SayHello对应的访问名是say-hello,注意不是用下划线连接,而是用连字符-连接。

客户端提交的信息通过验证后,可以考虑用refresh()或者redirect()方法避免表单重复提交问题。

yii\Web\Response:redirect()方法默认返回的状态码是302,该状态码表示要访问的资源被临时转移到另一个URL上,可以设置状态码为301,表示要访问的资源已经被永久转移到另一个URL上。

视图

yii\helpers\Html encode方法是用来转换特殊字符的,避免XSS攻击。

小部件

yii\Widgets\ActiveForm类能够根据一个或多个数据模型里的设置来生成视图。

Yii提供了很多小部件用于生成复杂且动态的视图,可以把很多视图代码改写为小部件,以提高重用量,加快开发效率。

实例

可访问方法

控制器 /controllers/SiteController.php

public function actionSay($message = 'Hello World!')
{return $this->render('say', ['message' => $message]);
}

视图 /views/site/say.php

<?php
use yii\helpers\Html;
?><?= Html::encode($message) ?>

然后就可以通过http://localhost:8080/index.php?r=site/say【&message=】来访问了。

表单

模型类 /models/EntryForm.php

<?php
namespace app\models;use yii\base\Model;class EntryForm extends Model
{public $username;public $email;public function rules(){return [[['username', 'email'], 'required'],['email', 'email'],];}
}

控制器 /controllers/SiteController.php

public function actionEntry()
{$model = new EntryForm();if ($model->load(Yii::$app->request->post()) && $model->validate()) {return $this->render('entry-form', ['model' => $model]);} else {return $this->render('entry', ['model' => $model]);}
}

视图 /views/site/entry.php

<?php
use yii\helpers\Html;
use yii\Widgets\ActiveForm;?><?php $form = ActiveForm::begin();?><?=$form->field($model, 'username');?>
<?=$form->field($model, 'email');?><div class="form-group"><?=Html::submitButton('Submit', ['class' => 'btn btn-primary']);?>
</div><?php ActiveForm::end();?>

视图 /views/site/entry-form.php

<?phpuse yii\helpers\Html;?><p>You have submitted the following information:
</p><ul><li><label></label><?=Html::encode($model->username);?></li><li><label></label><?=Html::encode($model->email);?></li>
</ul>

然后就可以通过http://localhost:8080/index.php?r=site/entry来测试表单了。


http://www.ppmy.cn/news/205698.html

相关文章

C语言++i 与i++ 详解

i;i;就C语言代码来看&#xff0c;i 和 i 都只有一行&#xff0c;看起来似乎二者的执行效率一样了&#xff1f;其实不是的&#xff0c;在学习C语言时&#xff0c;教材和老师一般都会强调 i 和 i 的区别&#xff0c;例如下面这段C语言代码&#xff1a; int i , j, k;i 0;j i;i…

如何理解int i=1;i=i++;

如何理解int i1;ii; 1、引入两个概念&#xff1a;局部变量表和操作数栈 栈帧(Stack Frame)&#xff1a; 是用于支持虚拟机进行方法调用和方法执行的数据结构&#xff0c;它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表&…

tinyint(1)和int(1)的区别

问题&#xff1a;int(1) 和 tinyint(1) 有什么区别呢&#xff1f; 像这样的设计&#xff0c;反正我是不会写int(1)的。 查了下&#xff0c;mysql中设置了储存类型后&#xff0c;储存是定长的&#xff0c;也就是说&#xff0c;int(1) 和 int(4) 在硬盘中所占的字节数都是一样的…

vivox21升级鸿蒙,vivo X21i相机规格再升级,加持AI成又一拍照神器

vivo手机凭借出色的外观以及强大的拍照功能获得众多消费者的青睐&#xff0c;尤其是最新的旗舰机X21系列&#xff0c;一经上市就成为新一代异型全面屏手机的佼佼者。如今&#xff0c;再推出姐妹版X21i,延续了X21系列的设计语言&#xff0c;除了比较明显的机身后盖变化&#xff…

c语言中 x21,vivo X21i值得买吗?vivo X21i配置、外观、性能等详细评测

值得一提的是&#xff0c;在智慧桌面的最新更新中&#xff0c;vivo还加入了“美食天下”的卡片。这个卡片有不少养生、美食方面的文章&#xff0c;介绍了各种食物的独特功效。而点击菜谱分类与食材大全后&#xff0c;还有各种美食的菜谱大全。有了它&#xff0c;吃货秒变大厨&a…

Android基站定位源代码

经过几天的调研以及测试&#xff0c;终于解决了联通2G、移动2G、电信3G的基站定位代码。团队里面只有这些机器的制式了。下面就由我来做一个详细的讲解吧。1 相关技术内容 Google Android Api里面的TelephonyManager的管理。 联通、移动、电信不同制式在获取基站位置的代码区别…

使用Chat gpt提高Android开发效率

简介 在过去几周里&#xff0c;我进行了一项令人大开眼界的实验&#xff0c;将 Chat-GPT&#xff08;我使用的是 Bing Chat&#xff0c;它在后台使用了 GPT-4&#xff0c;并且可以免费使用&#xff09;融入到我的日常 Android 开发工作流程中&#xff0c;以探索它是否能够提高…

粉丝破千了,喊几个机器人跳个舞庆祝下

先看效果&#xff1a; 机器人跳舞 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>机器人跳舞</title><style>body, html {position: absolute;margin: 0;padding:…