博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2的MVC新特性
阅读量:6198 次
发布时间:2019-06-21

本文共 2446 字,大约阅读时间需要 8 分钟。

这篇文章主要来看看在Yii2之中的MVC,当然,最核心的思想还是跟Yii1.1一样的,但是我今天是想来看看在Yii2里的MVC跟Yii1.1有什么不同,或者应该直接说,Yii2的改进在哪里,以至于使得官方敢向着最好的PHP框架目标进击!

废话就不多说了,下面来看看分别M-V-C这三个部分:

模型(Model):

Yii之中的Models都继承与yii\base\Model,通常是用来存储数据并对这些数据设置一些特定的验证规则(rules())。每一个Model Class其实很多时候都是跟一些更加核心的类(比如Active Record)配合着使用,而在Yii2中,Active Record的增强也让我很惊喜,后续我打算在写一遍文章来专门介绍Yii2的Active Record

在每一个Model当中,attributesattributes label其实跟Yii1.1差不多,但让我特别值得拍手称快的是在Yii2中,除了rules()函数之外,还有scenarios()函数来增强Yii2的Model验证,rules()函数具体担当为Model的每一个attributes进行过滤验证,而scenarios()则可以根据不同的场景需要来声明哪一个attributes是无需验证的(Which means safe here);我们来看下面的例子:

[4, 32]], ['first_name', 'string', 'max' => 128], ['password', 'required','on' => 'signup'], ]; } public function scenarios() { return [ 'signup' => ['username', 'password'], 'update' => ['username', 'first_name'], ]; }}

这个例子中的password field只分配给Model中的signup 场景(scenario),所以有关password的验证只在signup这个scenario起作用,个人觉得这个是Yii2的Model中一个很牛逼的升级,因为这种机制的产生使得我们在开发的时候对一些attributes的验证和分配有了更灵活的掌控感,大大提高我们对表单可用性和场景化应用的设计开发。

多个attributes的分配也有一些细微的变化,我们之前在Yii1.1的时候,经常会这样:

if (isset($_POST['userModel'])){   $model->attributes = $_POST['userModel'];}

而在Yii2中,你只需要这样:

$model->load($_POST);

这里的关键就是load()函数会自动检查在$model->formName().定义的$_POST的索引

视图(Views)

在Yii2的Views中也有一些小小的变化,最明显的变化莫过于render()函数了,现在它会返回一个值,而不是像Yii1.1的那样输出(output)值,比如:

public function actionIndex(){    $models = Posts::find()->all();    echo $this->render('index', array('models' => $models));}

看到了没,render的内容现在可以直接用echo来输出了,先不管这是怎么回事(更多细节我会在下面的Controller部分里讲解)。还有一点就是,Yii2还有官方的扩展(official extensions)来支持一些常见的模板引擎如:smartytwig等。喜欢这些模版引擎的同学,你们有福气了。

在Views还有一个值得注意的地方就是$this变量,在Yii1.1中,$this可以说就是链接Controller和Views的中介;而在Yii2中,$this代表的是yii\web\View组件,这使得我们可以在view当中设置一些很有用的Views中的属性比如:网页的title,meta等,甚至是注册js 脚本也是OK的,是不是有一种很直观的感受,跟写原生的html一样,我想要什么title就要什么,That is cool!

控制器(Controllers)

首先直接来看一下代码:

render('index'); } public function actionTest() { // 只在浏览器中打印 "test" 字符串,cool return 'test'; }}

这里你有没有看到use yii\web\Controller?没错,Yii2中已充分开始使用PHP命名空间,当初在Yii1.1的时候一直听说Yii2会使用更高级的PHP特性来完全重写,果然啊,点个赞。而且现在的Controller中,每个输出变为了返回,就像上面的actionTest()一样,你现在可以完全返回一个字符串了,有没有一丝丝Laravel的影子?不过,你在Yii2的Controller中只需认识这些新特性基本就足矣,因为一些更基本的东西跟Yii1.1是一样的撒,完全不用怕,(我是说如果你上手过Yii1.1的话)。

写在最后

正如你在这篇文章看到的一样,在Yii2中几乎所有的MVC组件变化都使得Yii2更好用了,我相信这会带给开发者更好的的开发体验,毕竟Yii2中看到了一丝丝优雅的样子!所以,各位还在苦恼应该上手哪个PHP框架的同学们,请不要犹豫,Yii2就是一个极好的选择。狂点这里:

[原文来自]

转载地址:http://tvnca.baihongyu.com/

你可能感兴趣的文章
find与xargs的用法------例子
查看>>
IPv6 to IPv4自动隧道实验笔记
查看>>
jCarousel jQuery下的滚动切换传送插件
查看>>
Saltstack --crontab定时任务管理
查看>>
使用AutoMySQLBackup 自动备份MySQL数据库
查看>>
Zabbix3.4分布式监控----zabbix_proxy
查看>>
华为AC双机热备(双链路热备)
查看>>
seo
查看>>
如何删除“无法删除文件,无法读取源文件或磁盘”文件
查看>>
几个简单的html+css+js题目
查看>>
webpack config
查看>>
codeforces 961D Pair Of Lines
查看>>
Oracle 18c 数据库中scott用户不存在的解决方法
查看>>
1.计算机发展阶段 计算机发展历史 机械式计算机 机电式计算机 电子计算机 逻辑电路与计算机 二极管 电子管 晶体管 硅 门电路 计算机 电磁学计算机二进制...
查看>>
《算法导论》读书笔记之第15章 动态规划[总结]
查看>>
js实现图片轮播(终结版)
查看>>
Exchange 常见问题之二
查看>>
殊不知,互联网运营才能实现最高效营销!
查看>>
linux常用命令之查阅文件
查看>>
两种方式建立Vsftpd虚拟用户
查看>>