magento教程---如何使用 virtual types
作者:互联网
视频地址:
https://www.youtube.com/watch?v=DiAS3vE6OO4&list=PL9Q0S-CmtAhJVjwnK5ip6H84sCuRQcACY&index=28
virtual types 实现了依赖注入的无限嵌套。并且不用创建出实际的类,用di.xml创建出虚拟类。
这个对象,是把一个数组转换成一个对象。然后获取数组的value,就可以用$object->key这样的形式了。
数据访问层 repository
repository位于model和block之间,在magento中。repository位于model和viewmodel之间。
model repository service viewmodel block 分别干嘛的?
model链接数据库。得到orm------->基础数据
repository会对你真实想要的数据进行进一步的处理。----->加工好的数据
service ------->晚点补充
viewmodel----->注入到block,真实的和phtml进行交互。从repository得到加工好的数据,然后供页面调用。页面是不会调用repository的。也是直接得到phtml传递过来的参数。---->只写被phtml直接调用的方法。其他的东西都注入到构造函数内。
block --->页面真实调用phtml。不过业务逻辑都是给注入的viewmodel来实现了。自己一般不干活了。
层与层之间的链接都是用依赖注入。把上一层的对象注入到自己的构造函数内,然后进行初始化。
原则上,不跨层。本层只注入上一层,然后得到数据。
层与层之间传递的是啥?传递的是对象。是那个依赖注入到构造函数内的对象。这个对象里包含属性和方法。属性里也许存了数据。
但是真实调用,应该是倒过来的过程
这个过程来调用,通过phtml里传递参数,然后一级一级调用。
interface一般放在api这个目录里。
注入,是依赖关系,所以一般是不是都需要跨层,而且跨的是相邻的两个层??
这个似乎个猜想,同层的是不是不用依赖注入?他们相互不用去依赖??也是猜测
因为最终是要注入到viewmodel层的。。这个是为什么?因为viewmodel是直接和phtml交互的,是和用户的输入交互的。phtml调用viewmodel。用户手动输入调用的是viewmodel。
因为重新写了一个model层的数据。把model层注入到repository层。得到一个新的repository。然后再把这个repository注入到viewmodel层。注入的都是对象,是一个完整的可以获取数据的链路。
最终是要根据phtml中或者url中,传递的参数去数据库里获取数据的。如果传商品id这些。所以参数在phtml传递给viewmodel后,要一直传递给repository,再传递给model。再调用数据库。所以每一个方法内都要有这个传递的参数才可以。
这个是model层,相当于离数据库最近的层,这个参数肯定是通过前端传过来的。就是通过phtml一层一层传递过来的。所以每层都需要传递一个参数。
最终要得到数据。然后再把数据显示到页面。
什么时候用preference和virtual types:
如果你想让所有类中的都变化,那就用preference,
如果只想让某一个页面参数变化,或者某一个类产生变化,那就用virtual type,因为他可以指定具体某个类来进行注入。
标签:phtml,调用,repository,viewmodel,virtual,---,magento,model,注入 来源: https://blog.csdn.net/zwj900124/article/details/121999451