【转】1.4 Magento2语法讲解

M2不是一个标准的MVC架构。

这是m2的app/code/Magento/Catalog插件代码。
可以看到,它有Controller,也有Model,也有view.
奇怪的是,在Controller找不到调用模版的代码。
这是因为我们之前讲过,m2的页面都是用xml写的,xml里是由若干个block组成的。block里调用的template就是view下面的template。

所以,这个Controller加载的是该页面的xml文件。xml再解析输出成html。

细心的你会发现,这个插件里也有一个Block目录,没错,就是它。
xml里的就是这个block,这个block里才是真正的逻辑功能代码。

到处都是block。

M2有自己的语法,封装了很多类。

增删改查

一个标准的php类如下:

<?php
namespace Zou\Test\Block;
class Demo extends \Magento\Framework\View\Element\Template{protected $_storeManager;protected $_scopeConfig;protected $_productFactory;protected $_productCollectionFactory;protected $_categoryFactory;protected $_categoryCollectionFactory;protected $_customerFactory;protected $_customerCollectionFactory;protected $_orderFactory;protected $_orderCollectionFactory;public function __construct(\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,\Magento\Store\Model\StoreManagerInterface $storeManager,\Magento\Catalog\Model\ProductFactory $productFactory,\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,\Magento\Catalog\Model\CategoryFactory $categoryFactory,\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,\Magento\Customer\Model\CustomerFactory $customerFactory,\Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerCollectionFactory,\Magento\Sales\Model\OrderFactory $orderFactory,\Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory) {$this->_scopeConfig = $scopeConfig;$this->_storeManager = $storeManager;$this->_productFactory = $productFactory;$this->_productCollectionFactory = $productCollectionFactory;$this->_categoryFactory = $categoryFactory;$this->_categoryCollectionFactory = $categoryCollectionFactory;$this->_customerFactory = $customerFactory;$this->_customerCollectionFactory = $customerCollectionFactory;}//通过产品id,获取产品的name(属性)public function getProductName($pid=1){$product = $this->_productFactory->create()->load($pid);return $product->getName();}//获取价格大于100的产品public function getProductsByPrice($price=100){$productCollection = $this->_productCollectionFactory->create();$productCollection->addAttributeToSelect('price');$productCollection->addAttributeToFilter('price', array('gt'=>$price));foreach ($productCollection as $product) {echo $product->getPrice();}return $productCollection;}//把id为10的产品价格修改为50public function setProduct(){$price = 50;$pid = 10;$product = $this->_productFactory->create()->load($pid);$product->setPrice(50);$product->save();}//删掉id为1的产品public function deleteProduct($pid=1){$product = $this->_productFactory->create()->load($pid);$product->delete();}}
?>

namespace对phper应该不陌生了,现在php7新框架基本上都是用的命名空间。

在__construct里的声明的需要的类。

比如

  1. \Magento\Catalog\Model\ProductFactory是产品模型类,通过这个类你可以得到单个产品的任何信息(比如属性)。
  2. \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory是产品数据集,通过这个类,你可以任意按条件(比如属性)搜索过滤产品
  3. \Magento\Catalog\Model\CategoryFactory是分类模型类,通过这个类你可以得到单个分类的任何信息(比如属性)。
  4. \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory是分类数据集,通过这个类,你可以任意按条件(比如属性)搜索过滤分类
  5. \Magento\Customer\Model\CustomerFactory $customerFactory是客户联系人模型类,通过这个类你可以得到单个Customer的任何信息(比如属性)。
  6. \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory是联系人数据集,通过这个类,你可以任意按条件(比如属性)搜索过滤联系人
  7. \Magento\Sales\Model\OrderFactory是订单模型类,通过这个类你可以得到单个订单的任何信息(比如属性)。
  8. \Magento\Sales\Model\ResourceModel\Order\CollectionFactory是订单数据集,通过这个类,你可以任意按条件(比如属性)搜索过滤订单

通过上面这个简易的php代码,你就学会了增删改查,是不是非常简单粗暴?

通过M2提供的模型数据资源类,就可以从容优雅的进行增删改查。

先卖个关子,具体的我们在第四章做插件的时候 会细讲。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqoop从HDFS导出数据到Mysql,卡在Running job: job_1571036741208_0010不动了,或者map 100% reduce 0%不动了

用sqoop从HDFS导出数据到mysql&#xff0c;一直卡在Running job: job_1571036741208_0010&#xff0c;应该是内存太小&#xff0c;导致速度太慢 在 yarn-site-xml中增加下面两个&#xff0c;然后分发给各个节点&#xff0c;再重启yarn即可 <property> <name>ya…

【转】1.5 运行原理剖析

我们不讲底层架构,核心原理,太枯燥&#xff0c;也记不住&#xff0c;没必要。 毕竟不是人人都要当架构师。 我们从M2的模式说起。 理解了他的模式,就知道了他的原理。 M2有3种模式, 默认模式(default)开发模式(developer)生产模式(production) 默认模式 安装完成后&#xf…

SparkStreaming简介 - 与第一个Spark实时计算程序,使用netcat来写数据 - wordcount

官方文档 Spark Streaming 火花流是spark API的扩展&#xff0c;它支持可伸缩、高吞吐量、容错的实时数据流处理。 数据可以从多种来源(如Kafka、Flume、Kinesis或tcp套接字)中摄取&#xff0c;并且可以使用用高级函数表示的复杂算法进行处理&#xff0c;例如map, reduce, jo…

【转】老邹说Magento的前世今生

文章目录[隐藏] Magento Commerce的历史Magento 2版本历史Magento电子商务的特点和功能Magento市场Magento认证Magento事件为什么Magento统治电子商务领域 想要深入了解magento&#xff0c;我们有必要回顾一下Magento的前世今生&#xff0c;看它是如何一步步成长起来的。 为什…

SparkStreaming - 自定义数据源(自定义采集器)

// 声明采集器 // 1&#xff09;继承Receiver // 2) 重写方法 onStart&#xff0c;onStop package date_10_16_SparkStreamingimport java.io.{BufferedReader, InputStreamReader} import java.net.Socketimport org.apache.spark.SparkConf import org.apache.spark.storage…

【转】Magento2 安装系列一 虚拟机、CentOS7 安装

前言 最近打算在Windows10安装最新的magento2.3&#xff0c;由于mg2.3对Windows支持不太友好&#xff0c;所以就打算在Windows10安装虚拟机&#xff0c;虚拟机安装CentOS7版本的Linux&#xff0c;Linux安装Lnmp环境&#xff0c;最终安装Magento2.3.虚拟机选择与安装 我这边打算…

SparkStreaming -Kafka数据源

SparkStreaming处理kafka作为数据源 所以我们要创建的是kafka的Dstream&#xff0c;那么就要使用到KafkaUtils下的createStream&#xff0c;先来看一下ctrl点进去查看&#xff0c;然后来写参数 package date_10_16_SparkStreamingimport org.apache.spark.SparkConf import or…

SparkStreaming - 无状态与有状态 updataStateByKey

无状态与有状态 简单来说&#xff0c;无状态就是每个采集周期分别采集&#xff0c;并不会把前面的采集周期的数据一起计算 有状态就是&#xff1a;把前面采集周期的也算进来&#xff0c; 比如wordcount&#xff0c;无状态统计的就是每个采集周期内的个数&#xff0c;有状态的…

flink(一个流处理,一个批处理)

流处理&#xff0c;这里用netcat来完成 package com.smalltiger.flinkWCimport org.apache.flink.api.java.utils.ParameterTool import org.apache.flink.streaming.api.scala._/*** Created by smalltiger on 2019/11/6.* flink基于流处理的一个WordCount统计*/ object Stre…

SparkStreaming - 窗口函数(窗口操作)

窗口操作就是把多个采集周期设置成一个窗口&#xff0c;一起来计算&#xff0c;然后进行滑动&#xff0c;根据设置的滑动大小。 窗口大小和滑动大小&#xff0c;要是采集周期的倍数 package date_10_17_SparkStreamingimport org.apache.spark.SparkConf import org.apache.s…

Hive优化(再一遍系统复习)

Hive优化&#xff08;或者面试问你工作中遇到的问题就可以答hive优化&#xff09; select * 是不走MR程序的可以开启本地模式local&#xff08;当文件小于默认128M且文件数少于4个&#xff0c;不走MR&#xff09;表的优化 (1) 小表 join 大表 将key相对分散&#xff0c;并且数…

volatile学习(可见性,不保证原子性,禁止指令重排(双端检索机制))

volatile是java虚拟机提供的轻量级的同步机制&#xff1a; 1.保证可见性&#xff1a;线程之间可见性(及时通知) 2.不保证原子性 3.禁止指令重排 先了解一下jvm同步 由于JVM运行程序的实体是线程&#xff0c;而每个线程创建时JVM都会为其创建一个工作内存&#xff08;或者称为…

CAS(比较并交换)学习CAS实现原子性+volatile实现可见性,cas与synchronized比较的优缺点

1、CAS底层原理&#xff1f; 自旋锁(cas思想)unsafe类&#xff0c;保证原子性靠的是unsafe类 1.首先可以看到&#xff1a; atomicInteger.getAndIncrement();getAndIncrement()的底层是 public final int getAndIncrement() {return unsafe.getAndAddInt(this, valueOffset,…

cas引出的ABA问题?如何解决?- 理解原子引用、时间戳(版本号)原子引用

ABA问题&#xff1a; 假如有两个线程1&#xff0c;2&#xff1b; cas下&#xff1a;1.线程取值完等待&#xff0c;2线程取值并把A改成B&#xff0c;有把B改成A&#xff0c;这是1线程执行会任务A还是原来的A没有发生改变&#xff0c;如果不在乎中间结果&#xff0c;只看收尾&am…

ArrayList、HashMap、HashSet是线程不安全的,高并发下如何解决?

1.故障现象 &#xff1a;ArrayList的add()方法并没有使用synchronized所以是线程不安全的&#xff0c;会造成java.util.ConcurrentmodificationException(并发修改异常) 2.导致原因&#xff1a;并发争抢修改导致 3.解决办法&#xff08;以ArrayList为例&#xff0c;其他类似&…

java -锁(公平、非公平锁、可重入锁【递归锁】、自旋锁)

1.公平锁、非公平锁 2.可重入锁&#xff08;递归锁&#xff09; 3.自旋锁 AtomicReference atomicReference new AtomicReference();//原子引用线程下面代码5秒钟自旋了10万次&#xff0c;还是很消耗CPU的 package HighConcurrency;import java.util.concurrent.TimeUnit; imp…

CountDownLatch,同步辅助类

public class CountDownLatchextends Object一个同步辅助类&#xff0c;在完成一组正在其他线程中执行的操作之前&#xff0c;它允许一个或多个线程一直等待。 假设定义一个计数器为 5。每个线程完成任务后计数减1计数器减为 0 则通知等待的线程。 用给定的计数 初始化 Count…

CyclicBarrier-同步辅助类

与CountDownLatch相反&#xff0c;CyclicBarrier是做加法 public class CyclicBarrierextends Object一个同步辅助类&#xff0c;它允许一组线程互相等待&#xff0c;直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中&#xff0c;这些线程必…

阻塞队列-BlockningQueue

阻塞队列的前言介绍引用于https://www.cnblogs.com/aspirant/p/8657801.html&#xff0c;写的挺好有兴趣可以看一看 一. 前言 在新增的Concurrent包中&#xff0c;BlockingQueue很好的解决了多线程中&#xff0c;如何高效安全“传输”数据的问题。通过这些高效并且线程安全的…

多线程下的生产者消费者(一个初始值为0的变量,两个线程一个加1一个减1,轮询5轮)

在使用Lock之前&#xff0c;我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法&#xff0c;与Lock配合可以实现等待/通知模式 下面用的是lock锁 …