Yii小部件在组件中调用

时间:2014-05-12 13:41:03

标签: php yii yii-widgets

调用Yii小部件(例如

)被认为是不好的做法
$this->widget('application.extensions.qrcode.QRCodeGenerator', array(
    'data' => $this->data,
    'subfolderVar' => true,
    'matrixPointSize' => 5,
));

来自组件或模型?如果是的话,为什么呢?

1 个答案:

答案 0 :(得分:6)

在控制器/模型等中调用小部件是不好的做法,因为小部件是视图对象;

这违反了MVC原则。 MVC是根据某些规则设计的,如果遵循这些规则会带来显着的好处

阅读Yii自己对implemented MVC如何更好地理解

的解释

简而言之,Yii是一个MVC框架;

有三层架构
**Model** layer represents  consists of application data, business rules, logic and functions

**view** layer represents  any output representation of information such a widget

**Controller** layer accepts input and converts it to commands for the model or view

使用三个不同层的目的是称为Separation of Concerns (Soc)的设计概念。

基本上,如果问题是分开的,那么设计者/ UI / UX /前端和应用程序员基本上可以相互独立地工作。设计人员需要担心如何呈现数据而不是如何或来自哪里(即设计和使用小部件),应用程序员只需要考虑业务逻辑而不用担心它需要如何呈现

当您在模型中混合视图对象时,这会被破坏。

维护这种分离还有许多其他优点,包括更容易调试(你知道在哪里)更简单的测试(单元更小更简单),更好的项目管理(不同的团队在应用程序的不同部分工作而不会破坏彼此的工作),松散耦合(我可以轻松地使用API​​或移动应用程序的相同模型函数),代码可重用性等;

注意这不全面,这只是为了给你一个想法;完整的不同设计模式的优缺点可以fill many books