摘要:而且现在的中,每个输出变为了返回,就像上面的一样,你现在可以完全返回一个字符串了,有没有一丝丝的影子不过,你在的中只需认识这些新特性基本就足矣,因为一些更基本的东西跟是一样的撒,完全不用怕,我是说如果你上手过的话。
这篇文章主要来看看在Yii2之中的MVC,当然,最核心的思想还是跟Yii1.1一样的,但是我今天是想来看看在Yii2里的MVC跟Yii1.1有什么不同,或者应该直接说,Yii2的改进在哪里,以至于使得官方敢向着最好的PHP框架目标进击!
废话就不多说了,下面来看看分别M-V-C这三个部分:
模型(Model):Yii之中的Models都继承与yiiaseModel,通常是用来存储数据并对这些数据设置一些特定的验证规则(rules())。每一个Model Class其实很多时候都是跟一些更加核心的类(比如Active Record)配合着使用,而在Yii2中,Active Record的增强也让我很惊喜,后续我打算在写一遍文章来专门介绍Yii2的Active Record。
在每一个Model当中,attributes和attributes 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)来支持一些常见的模板引擎如:smarty,twig等。喜欢这些模版引擎的同学,你们有福气了。
在Views还有一个值得注意的地方就是$this变量,在Yii1.1中,$this可以说就是链接Controller和Views的中介;而在Yii2中,$this代表的是yiiwebView组件,这使得我们可以在view当中设置一些很有用的Views中的属性比如:网页的title,meta等,甚至是注册js 脚本也是OK的,是不是有一种很直观的感受,跟写原生的html一样,我想要什么title就要什么,That is cool!
控制器(Controllers)首先直接来看一下代码:
render("index"); } public function actionTest() { // 只在浏览器中打印 "test" 字符串,cool return "test"; } }
这里你有没有看到use yiiwebController?没错,Yii2中已充分开始使用PHP命名空间,当初在Yii1.1的时候一直听说Yii2会使用更高级的PHP特性来完全重写,果然啊,点个赞。而且现在的Controller中,每个输出变为了返回,就像上面的actionTest()一样,你现在可以完全返回一个字符串了,有没有一丝丝Laravel的影子?不过,你在Yii2的Controller中只需认识这些新特性基本就足矣,因为一些更基本的东西跟Yii1.1是一样的撒,完全不用怕,(我是说如果你上手过Yii1.1的话)。
写在最后正如你在这篇文章看到的一样,在Yii2中几乎所有的MVC组件变化都使得Yii2更好用了,我相信这会带给开发者更好的的开发体验,毕竟Yii2中看到了一丝丝优雅的样子!所以,各位还在苦恼应该上手哪个PHP框架的同学们,请不要犹豫,Yii2就是一个极好的选择。狂点这里:http://www.yiiframework.com/
[原文来自] http://www.jellybool.com/post/yii2-mvc-components
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31908.html
摘要:而且很明显地,我们可以看到,一旦输入框在失去焦点的时候,如果里面没有输入任何内容,每个输入框就会有相应的错误提示,用户体验很不错。 原文来自: https://jellybool.com/post/programming-with-yii2-exploring-mvc-forms-a... 上一篇文章我们简单地实现了Yii2框架安装和Hello World,而在这一篇文章当中...
摘要:出于实战基础加之自语言的书籍出版以来,几乎所有的编程书籍都讲述了一个的例子作为开始。操作,其实就是一个是动作的意思,也可以描述为我们前面说的响应地址。 作者:白狼 出处:http://www.manks.top/document/yii_first_application.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究...
摘要:框架最佳实践最佳实践在设计良好的应用中,控制器很精练,包含的操作代码简短如果你的控制器很复杂,通常意味着需要重构,转移一些代码到其他类中。层业务逻辑层框架由,,组成,执行流程一般是在访问获取数据,通过渲染页面。 Yii2.0框架 MVC 最佳实践 Controller最佳实践 在设计良好的应用中,控制器很精练,包含的操作代码简短; 如果你的控制器很复杂,通常意味着需要重构, 转移一些代...
摘要:高性能始终是的首要目标之一。版是上代的老版本,现在处于维护状态。版是一个完全重写的版本,采用了最新的技术和协议,包括依赖包管理器代码规范命名空间特质等等。所以,我们学习版本。启用本镜像服务系统全局配置即将配置信息添加到的全局配置文件中。 工作中需要用到YII框架,于是乎,系统的学习下这套框架,详细教程请看考该站完整系列:YII2教程 一、YII简介 1、什么是YII Yii 是一个高性...
阅读 2774·2021-11-22 13:54
阅读 3500·2021-11-16 11:44
阅读 1336·2021-09-07 10:19
阅读 1455·2019-08-29 17:30
阅读 3159·2019-08-29 11:33
阅读 3524·2019-08-26 12:18
阅读 2865·2019-08-26 11:53
阅读 1314·2019-08-26 10:47