文章列表


magento2中的对象管理器以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在Magento 2中,对象管理器(Object Manager)是一个用于创建和管理类实例的核心组件。您可以使用对象管理器来获取Magento 2中的各种类的实例。以下是一个简单的示例:</p><p><br/></p><pre class="brush:as3;toolbar:false">use&nbsp;Magento\Framework\App\ObjectManager; use&nbsp;Magento\Catalog\Api\ProductRepositoryInterface; class&nbsp;MyCustomClass { &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;$productRepository; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$objectManager&nbsp;=&nbsp;ObjectManager::getInstance(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;productRepository&nbsp;=&nbsp;$objectManager-&gt;get(ProductRepositoryInterface::class); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;getProductById($id) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$this-&gt;productRepository-&gt;getById($id); &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的示例中,我们创建了一个名为 MyCustomClass 的类,并使用对象管理器获取了 ProductRepositoryInterface 的实例。我们还在构造函数中初始化了 $productRepository 属性,并使用该属性来获取指定 $id 的产品。</p><p><br/></p><p>虽然使用对象管理器可以方便地获取Magento 2中的类的实例,但它不是最佳实践。因为使用对象管理器会导致代码耦合,使代码难以测试和维护。Magento 2推荐使用依赖注入来获取所需的类实例,而不是使用对象管理器。</p><p><br/></p>

magento2中的依赖注入以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在Magento 2中,依赖注入是一种设计模式,用于从对象本身的构造函数中获取所需的依赖项,而不是通过对象管理器或其他方式进行实例化。</p><p><br/></p><p>以下是一个简单的示例:</p><pre class="brush:as3;toolbar:false"> use&nbsp;Magento\Catalog\Api\ProductRepositoryInterface; class&nbsp;MyCustomClass { &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;$productRepository; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct(ProductRepositoryInterface&nbsp;$productRepository) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;productRepository&nbsp;=&nbsp;$productRepository; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;getProductById($id) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$this-&gt;productRepository-&gt;getById($id); &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的示例中,我们创建了一个名为 MyCustomClass 的类,并在构造函数中声明了 ProductRepositoryInterface 依赖项。通过这种方式,我们可以使用依赖注入来传递 ProductRepositoryInterface 实例,并将其存储在 $productRepository 属性中。</p><p><br/></p><p>使用依赖注入可以帮助我们减少代码耦合,使代码更容易测试和维护。同时,在Magento 2中,依赖注入还可以使用XML配置文件和自动生成的代码来自动注入所需的依赖项。</p><p><br/></p>

magento2中的公共接口和 API以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在Magento 2中,公共接口和API是用于与Magento 2的其他系统或第三方应用程序进行交互的关键组件。它们允许您从外部应用程序中访问Magento 2的核心功能和数据。</p><p><br/></p><p>以下是一个简单的示例:</p><p><br/></p><pre class="brush:as3;toolbar:false">use&nbsp;Magento\Framework\Api\SearchCriteriaBuilder; use&nbsp;Magento\Customer\Api\CustomerRepositoryInterface; class&nbsp;MyCustomClass { &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;$customerRepository; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;$searchCriteriaBuilder; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct(CustomerRepositoryInterface&nbsp;$customerRepository,&nbsp;SearchCriteriaBuilder&nbsp;$searchCriteriaBuilder) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;customerRepository&nbsp;=&nbsp;$customerRepository; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;searchCriteriaBuilder&nbsp;=&nbsp;$searchCriteriaBuilder; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;getCustomerByEmail($email) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$searchCriteria&nbsp;=&nbsp;$this-&gt;searchCriteriaBuilder-&gt;addFilter(&#39;email&#39;,&nbsp;$email)-&gt;create(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$customerList&nbsp;=&nbsp;$this-&gt;customerRepository-&gt;getList($searchCriteria)-&gt;getItems(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(count($customerList)&nbsp;&gt;&nbsp;0)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$customerList[0]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的示例中,我们创建了一个名为 MyCustomClass 的类,并在构造函数中注入了 CustomerRepositoryInterface 和 SearchCriteriaBuilder。通过这些接口,我们可以获取指定电子邮件的客户。</p><p><br/></p><p>值得注意的是,API和公共接口在Magento 2中使用相同的接口类型。它们只是根据使用方式和访问权限进行分类。例如,CustomerRepositoryInterface 是公共接口,因此只能用于在Magento 2中运行的代码中,而不是在外部应用程序中使用。</p><p><br/></p><p>如果您想要使用Magento 2的API来与外部应用程序进行交互,则可以使用Web API。Web API 允许您使用HTTP请求(例如GET、POST、PUT和DELETE)来调用Magento 2的功能和服务。要使用Web API,您需要首先在Magento 2后端配置Web API访问和授权,并为每个要使用的API端点生成令牌。然后,您可以使用curl或其他HTTP客户端来调用API端点。以下是一个简单的示例:</p><p><br/></p><p><br/></p><p>curl -X GET <span style="color: #ce9178;">&quot;http://magento2-base-url/rest/V1/products?searchCriteria[pageSize]=10&quot;</span> -H <span style="color: #ce9178;">&quot;Authorization: Bearer &lt;token&gt;&quot;</span></p><p>在上面的示例中,我们使用curl来调用Magento 2的Web API,以获取前10个产品。我们在请求标头中包含了一个有效的令牌,以便进行身份验证和授权。</p><p><br/></p>

magento2中的服务契约设计模式以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>服务契约设计模式是一种基于接口的设计模式,用于定义服务的行为和数据结构。在Magento 2中,服务契约用于定义模块之间的接口,以便实现松散耦合和更好的可扩展性。</p><p><br/></p><p>Magento 2中的服务契约通常使用Interface后缀命名。例如,以下是一个定义了一个计算器服务的接口:</p><p><br/></p><pre class="brush:as3;toolbar:false">namespace&nbsp;MyVendor\MyModule\Api; interface&nbsp;CalculatorInterface { &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Adds&nbsp;two&nbsp;numbers&nbsp;together&nbsp;and&nbsp;returns&nbsp;the&nbsp;result. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;float&nbsp;$a&nbsp;The&nbsp;first&nbsp;number&nbsp;to&nbsp;add. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;float&nbsp;$b&nbsp;The&nbsp;second&nbsp;number&nbsp;to&nbsp;add. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;float&nbsp;The&nbsp;sum&nbsp;of&nbsp;the&nbsp;two&nbsp;numbers. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;add($a,&nbsp;$b); }</pre><p>在上面的代码中,我们定义了一个名为 CalculatorInterface 的接口,并定义了一个名为 add() 的方法,该方法接受两个参数并返回它们的和。请注意,我们在方法注释中提供了有关方法行为的详细说明。这些注释非常重要,因为它们可以让其他开发人员更容易地了解如何使用您的服务。</p><p><br/></p><p>接口定义后,我们可以通过实现该接口的类来提供服务。以下是一个实现 CalculatorInterface 接口的示例:</p><p><br/></p><pre class="brush:as3;toolbar:false">namespace&nbsp;MyVendor\MyModule\Model; use&nbsp;MyVendor\MyModule\Api\CalculatorInterface; class&nbsp;Calculator&nbsp;implements&nbsp;CalculatorInterface { &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;add($a,&nbsp;$b) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$a&nbsp;+&nbsp;$b; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的代码中,我们创建了一个名为 Calculator 的类,并实现了 CalculatorInterface 接口中定义的 add() 方法。这个方法执行加法操作并返回结果。</p><p><br/></p><p>现在,我们可以使用Magento 2的对象管理器来访问我们的服务。以下是一个使用 Calculator 服务的示例:</p><p><br/></p><pre class="brush:as3;toolbar:false">use&nbsp;MyVendor\MyModule\Api\CalculatorInterface; use&nbsp;Magento\Framework\App\Action\Action; class&nbsp;MyCustomAction&nbsp;extends&nbsp;Action { &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;$calculator; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct(CalculatorInterface&nbsp;$calculator) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;calculator&nbsp;=&nbsp;$calculator; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;execute() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;$this-&gt;calculator-&gt;add(2,&nbsp;3); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;The&nbsp;result&nbsp;is:&nbsp;&quot;&nbsp;.&nbsp;$result; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的代码中,我们创建了一个名为 MyCustomAction 的类,并注入了 CalculatorInterface 接口。我们在 execute() 方法中调用 Calculator 服务的 add() 方法,并将结果打印到屏幕上。</p><p><br/></p><p>使用服务契约设计模式可以使代码更易于理解、测试和维护。它使您的代码更加灵活和可扩展,因为它们能够轻松地与其他模块和第三方应用程序进行交互。</p><p><br/></p>

magento2中的异步和延迟操作以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在 Magento 2 中,可以使用异步和延迟操作来提高应用程序的性能和可伸缩性。异步操作允许在后台执行长时间运行的任务,而不会阻塞应用程序的其他部分。延迟操作允许将任务推迟到稍后执行,以避免阻塞当前操作。</p><p><br/></p><p>以下是在 Magento 2 中使用异步和延迟操作的代码示例:</p><p><br/></p><p>异步操作</p><p></p><pre class="brush:as3;toolbar:false">&lt;?php use&nbsp;Magento\Framework\App\Bootstrap; use&nbsp;Magento\Framework\App\Http; use&nbsp;Magento\Framework\MessageQueue\PublisherInterface; require&nbsp;__DIR__&nbsp;.&nbsp;&#39;/../app/bootstrap.php&#39;; $params&nbsp;=&nbsp;$_SERVER; $bootstrap&nbsp;=&nbsp;Bootstrap::create(BP,&nbsp;$params); $app&nbsp;=&nbsp;$bootstrap-&gt;createApplication(Http::class); $bootstrap-&gt;run($app); /**&nbsp;@var&nbsp;PublisherInterface&nbsp;$publisher&nbsp;*/ $publisher&nbsp;=&nbsp;$bootstrap-&gt;getObjectManager()-&gt;get(PublisherInterface::class); $message&nbsp;=&nbsp;[&#39;order_id&#39;&nbsp;=&gt;&nbsp;1234,&nbsp;&#39;customer_id&#39;&nbsp;=&gt;&nbsp;5678]; $publisher-&gt;publish(&#39;order.queue&#39;,&nbsp;$message);</pre><p><span style="color: #6a9955;"></span><br/></p><p>在此示例中,我们使用 PublisherInterface 将消息发布到名为 order.queue 的消息队列中。然后,可以使用消息队列消费者来异步处理该消息。</p><p><br/></p><p>延迟操作</p><p></p><pre class="brush:as3;toolbar:false">&lt;?php use&nbsp;Magento\Framework\App\Bootstrap; use&nbsp;Magento\Framework\App\Http; use&nbsp;Magento\Framework\MessageQueue\PublisherInterface; use&nbsp;Magento\Framework\MessageQueue\EnvelopeFactory; use&nbsp;Magento\Framework\MessageQueue\DelayStrategy\Simple&nbsp;as&nbsp;DelayStrategy; require&nbsp;__DIR__&nbsp;.&nbsp;&#39;/../app/bootstrap.php&#39;; $params&nbsp;=&nbsp;$_SERVER; $bootstrap&nbsp;=&nbsp;Bootstrap::create(BP,&nbsp;$params); $app&nbsp;=&nbsp;$bootstrap-&gt;createApplication(Http::class); $bootstrap-&gt;run($app); /**&nbsp;@var&nbsp;PublisherInterface&nbsp;$publisher&nbsp;*/ $publisher&nbsp;=&nbsp;$bootstrap-&gt;getObjectManager()-&gt;get(PublisherInterface::class); /**&nbsp;@var&nbsp;EnvelopeFactory&nbsp;$envelopeFactory&nbsp;*/ $envelopeFactory&nbsp;=&nbsp;$bootstrap-&gt;getObjectManager()-&gt;get(EnvelopeFactory::class); /**&nbsp;@var&nbsp;DelayStrategy&nbsp;$delayStrategy&nbsp;*/ $delayStrategy&nbsp;=&nbsp;$bootstrap-&gt;getObjectManager()-&gt;get(DelayStrategy::class); $message&nbsp;=&nbsp;[&#39;order_id&#39;&nbsp;=&gt;&nbsp;1234,&nbsp;&#39;customer_id&#39;&nbsp;=&gt;&nbsp;5678]; $delay&nbsp;=&nbsp;600;&nbsp;//&nbsp;10&nbsp;minutes $envelope&nbsp;=&nbsp;$envelopeFactory-&gt;create([&#39;body&#39;&nbsp;=&gt;&nbsp;$message]); $envelope-&gt;setDelay($delayStrategy-&gt;getDelay($delay)); $publisher-&gt;publish(&#39;order.queue&#39;,&nbsp;$envelope);</pre><p><span style="color: #6a9955;"></span><br/></p><p>在此示例中,我们使用 DelayStrategy 来将消息推迟10分钟,然后使用 EnvelopeFactory 创建一个带有延迟的消息。然后,我们使用 PublisherInterface 将消息发布到名为 order.queue 的消息队列中。</p><p><br/></p><p>请注意,为了在 Magento 2 中使用异步和延迟操作,需要先安装和配置一个消息队列后端,例如 RabbitMQ 或 Amazon SQS。</p><p><br/></p>

magento2中的创建自定义命令以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在 Magento 2 中,可以创建自定义命令,这些命令可以通过命令行界面使用。这些自定义命令可以帮助你自动化一些常见任务,例如导入数据、运行测试等等。下面是创建一个简单的自定义命令的代码示例:</p><p><br/></p><p>创建自定义命令的类</p><p>首先,需要创建一个继承自 Symfony\Component\Console\Command\Command 的 PHP 类。这个类需要实现两个方法:configure() 和 execute()。configure() 方法用于配置命令的名称、描述、参数和选项,而 execute() 方法用于定义命令的行为。</p><p><br/></p><pre class="brush:as3;toolbar:false">&lt;?php namespace&nbsp;Namespace\Module\Console\Command; use&nbsp;Symfony\Component\Console\Command\Command; use&nbsp;Symfony\Component\Console\Input\InputInterface; use&nbsp;Symfony\Component\Console\Output\OutputInterface; class&nbsp;CustomCommand&nbsp;extends&nbsp;Command { &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;configure() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;setName(&#39;namespace:command:name&#39;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;setDescription(&#39;Description&nbsp;of&nbsp;the&nbsp;custom&nbsp;command&#39;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;setDefinition([]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::configure(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;execute(InputInterface&nbsp;$input,&nbsp;OutputInterface&nbsp;$output) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$output-&gt;writeln(&#39;Custom&nbsp;command&nbsp;executed.&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;\Magento\Framework\Console\Cli::RETURN_SUCCESS; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>注册自定义命令</p><p>将自定义命令的类注册到 Magento 2 的命令行界面。需要创建一个 di.xml 文件,使用 Magento\Framework\Console\CommandList 类的 add() 方法将自定义命令添加到命令列表中。</p><p><br/></p><pre class="brush:as3;toolbar:false">&lt;?xml&nbsp;version=&quot;1.0&quot;?&gt; &lt;config&nbsp;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&nbsp;xsi:noNamespaceSchemaLocation=&quot;urn:magento:framework:ObjectManager/etc/config.xsd&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;type&nbsp;name=&quot;Magento\Framework\Console\CommandList&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&nbsp;name=&quot;commands&quot;&nbsp;xsi:type=&quot;array&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&nbsp;name=&quot;custom_command&quot;&nbsp;xsi:type=&quot;object&quot;&gt;Namespace\Module\Console\Command\CustomCommand&lt;/item&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/argument&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/type&gt; &lt;/config&gt;</pre><p>运行自定义命令</p><p>现在,可以使用 bin/magento 脚本运行自定义命令了。例如:</p><pre class="brush:as3;toolbar:false">bin/magento&nbsp;namespace:command:name</pre><p>这将执行刚刚创建的自定义命令,并输出 Custom command executed.。</p><p><br/></p><p>这是一个简单的示例,你可以在自定义命令的 execute() 方法中编写复杂的逻辑,例如读取或写入数据库、调用 API 等等。</p><p><br/></p>

magento2中的命令命名准则以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在 Magento 2 中,命令的命名准则遵循以下规则:</p><p><br/></p><p>命令名称应该由两个或多个单词组成,使用冒号(:)分隔。第一个单词表示命令所属的模块或命名空间,第二个单词是具体的命令名称。</p><p>命令名称应该全部小写,使用连字符(-)分隔单词。例如:namespace:command-name</p><p>命令名称应该是独一无二的,以避免与其他模块或命名空间中的命令名称冲突。</p><p>下面是一个符合命名准则的自定义命令的代码示例:</p><p><br/></p><pre class="brush:as3;toolbar:false">&lt;?php namespace&nbsp;Namespace\Module\Console\Command; use&nbsp;Symfony\Component\Console\Command\Command; use&nbsp;Symfony\Component\Console\Input\InputInterface; use&nbsp;Symfony\Component\Console\Output\OutputInterface; class&nbsp;CustomCommand&nbsp;extends&nbsp;Command { &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;configure() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;setName(&#39;namespace:custom-command&#39;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;setDescription(&#39;Description&nbsp;of&nbsp;the&nbsp;custom&nbsp;command&#39;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;setDefinition([]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::configure(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;execute(InputInterface&nbsp;$input,&nbsp;OutputInterface&nbsp;$output) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$output-&gt;writeln(&#39;Custom&nbsp;command&nbsp;executed.&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;\Magento\Framework\Console\Cli::RETURN_SUCCESS; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>该自定义命令的名称是 namespace:custom-command,符合 Magento 2 的命名准则。</p><p><br/></p>

magento2中的缓存私有内容以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在 Magento 2 中,可以使用 Cache Manager 来创建和管理缓存。Cache Manager 可以帮助您在代码中缓存任何数据,包括私有内容。</p><p><br/></p><p>以下是一个示例,演示如何使用 Cache Manager 缓存私有内容:</p><p><br/></p><pre class="brush:as3;toolbar:false">&lt;?php namespace&nbsp;Namespace\Module\Block; use&nbsp;Magento\Framework\View\Element\Template\Context; use&nbsp;Magento\Framework\App\Cache\TypeListInterface; use&nbsp;Magento\Framework\App\Cache\Frontend\Pool; use&nbsp;Magento\Framework\App\Cache\StateInterface; class&nbsp;CustomBlock&nbsp;extends&nbsp;\Magento\Framework\View\Element\Template { &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;$_cacheManager; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;$context, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TypeListInterface&nbsp;$cacheTypeList, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pool&nbsp;$cacheFrontendPool, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StateInterface&nbsp;$cacheState, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array&nbsp;$data&nbsp;=&nbsp;[] &nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_cacheManager&nbsp;=&nbsp;$context-&gt;getCacheManager(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct($context,&nbsp;$data); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;_toHtml() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cacheKey&nbsp;=&nbsp;&#39;my_custom_block&#39;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cacheTag&nbsp;=&nbsp;[&#39;my_custom_block_tag&#39;]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($this-&gt;_cacheManager-&gt;load($cacheKey))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$this-&gt;_cacheManager-&gt;load($cacheKey); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;&#39;My&nbsp;Custom&nbsp;Block&nbsp;Content&#39;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_cacheManager-&gt;save($result,&nbsp;$cacheKey,&nbsp;$cacheTag); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$result; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的示例中,我们使用 _cacheManager 对象来缓存自定义块的私有内容。我们首先尝试从缓存中获取内容,如果找到了缓存,就直接返回缓存内容。否则,我们创建我们的内容,并将其保存到缓存中以备下次使用。</p><p><br/></p><p>我们使用 load() 方法从缓存中加载内容,该方法接受一个缓存键作为参数。如果找到了缓存,它会返回缓存内容,否则返回 false。</p><p><br/></p><p>我们使用 save() 方法将内容保存到缓存中。该方法接受三个参数:缓存内容、缓存键和缓存标签。缓存标签可以用于标记缓存,以便在需要清除缓存时进行识别。</p><p><br/></p><p>缓存管理器还提供其他方法,例如 remove() 和 clean(),用于清除缓存。</p><p><br/></p>

magento2中的缓存公共内容以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>Magento 2 中的缓存分为多种类型,其中包括缓存页面、布局、块、对象、集合和配置等。下面是一些常见的缓存类型和代码示例:</p><p>缓存页面</p><p>缓存页面是 Magento 2 中的一种缓存类型,它将整个页面缓存起来,以便下次访问时可以直接从缓存中读取。要使用 Magento 2 的页面缓存,您可以在布局文件中使用 <span style="color: #569cd6;">cacheable</span>=<span style="color: #ce9178;">&quot;true&quot;</span> 标记。</p><pre class="brush:as3;toolbar:false">&lt;page&nbsp;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&nbsp;xsi:noNamespaceSchemaLocation=&quot;urn:magento:framework:View/Layout/etc/page_configuration.xsd&quot;&nbsp;layout=&quot;2columns-left&quot;&nbsp;cacheable=&quot;true&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;页面内容&nbsp;--&gt; &lt;/page&gt;</pre><p>缓存块</p><p>缓存块是 Magento 2 中的另一种缓存类型,它可以将单个块的内容缓存起来,以便下次访问时可以直接从缓存中读取。要使用 Magento 2 的块缓存,您可以在块的 PHP 类中使用 <span style="color: #569cd6;">cacheable</span>=<span style="color: #ce9178;">&quot;true&quot;</span> 标记。</p><p><br/></p><p>例如,下面是一个使用块缓存的 PHP 类示例:</p><p><br/></p><p><br/></p><pre class="brush:as3;toolbar:false">&lt;?php namespace&nbsp;Vendor\Module\Block; use&nbsp;Magento\Framework\View\Element\Template; class&nbsp;MyBlock&nbsp;extends&nbsp;Template { &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;bool &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;$_isScopePrivate&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;bool &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;_isAllowed() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$this-&gt;_authorization-&gt;isAllowed(&#39;Vendor_Module::my_resource&#39;); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;getCacheKeyInfo() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;VENDOR_MODULE_MYBLOCK&#39;, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_storeManager-&gt;getStore()-&gt;getId(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_design-&gt;getDesignTheme()-&gt;getId(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_customerSession-&gt;getCustomerGroupId(), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intval($this-&gt;_customerSession-&gt;isLoggedIn()), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;getRequest()-&gt;getParam(&#39;id&#39;), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_scopeConfig-&gt;getValue(&#39;vendor/module/feature_enabled&#39;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的示例中,我们可以看到 MyBlock 类继承自 Template 类,并实现了 getCacheKeyInfo() 方法和 _isScopePrivate 属性,这使得块的内容可以被缓存起来。</p><p><br/></p>

magento2中的创建缓存类型以及代码示例

<h5 style="color:red;">系统学习magento二次开发,推荐小册:<a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank">《Magento中文全栈二次开发 》</a></h5> <div class="image-container"> <p> <a style="color:blue;" href="https://www.maxiaoke.com/manual/magento_cn_dev.html" target="_blank"> <img src="https://www.maxiaoke.com/uploads/images/20230218/bb9c82995c24d1105676e02f373755f5.jpg" alt="Magento中文全栈二次开发"> </a> </p> </div> <div class="text-container" style="font-size:14px; color:#888"> <p>本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。</p> </div> <hr><p>在 Magento 2 中,可以通过创建自定义的缓存类型来缓存您的应用程序数据。下面是一个示例,演示如何在 Magento 2 中创建自定义缓存类型:</p><p><br/></p><pre class="brush:as3;toolbar:false">&lt;?php namespace&nbsp;Namespace\Module\Model\Cache\Type; use&nbsp;Magento\Framework\App\Cache\Type\FrontendPool; use&nbsp;Magento\Framework\Cache\Frontend\Decorator\TagScope; class&nbsp;CustomCacheType&nbsp;extends&nbsp;TagScope { &nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;CACHE_TYPE&nbsp;=&nbsp;&#39;custom_cache_type&#39;; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct(FrontendPool&nbsp;$cacheFrontendPool) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct($cacheFrontendPool-&gt;get(self::CACHE_TYPE),&nbsp;self::CACHE_TYPE); &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的示例中,我们创建了一个名为 CustomCacheType 的自定义缓存类型,并继承了 TagScope 类来支持标签。</p><p><br/></p><p>我们定义了 CACHE_TYPE 常量来表示缓存类型的名称。</p><p><br/></p><p>我们在 __construct() 方法中获取缓存实例,并将其传递给 TagScope 类的构造函数。</p><p><br/></p><p>接下来,我们需要在 di.xml 文件中注册缓存类型:</p><p><br/></p><pre class="brush:as3;toolbar:false">&lt;config&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;type&nbsp;name=&quot;Namespace\Module\Model\Cache\Type\CustomCacheType&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;arguments&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&nbsp;name=&quot;cacheFrontendPool&quot;&nbsp;xsi:type=&quot;object&quot;&gt;Magento\Framework\App\Cache\Type\FrontendPool&lt;/argument&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/arguments&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/type&gt; &lt;/config&gt;</pre><p>在上面的示例中,我们将 Namespace\Module\Model\Cache\Type\CustomCacheType 类型注册为缓存类型,并传递了 cacheFrontendPool 依赖项。</p><p><br/></p><p>现在,我们可以在代码中使用我们的自定义缓存类型。例如,以下是一个示例,演示如何在 Magento 2 中使用自定义缓存类型:</p><p><br/></p><pre class="brush:as3;toolbar:false">&lt;?php namespace&nbsp;Namespace\Module\Block; use&nbsp;Namespace\Module\Model\Cache\Type\CustomCacheType; class&nbsp;CustomBlock&nbsp;extends&nbsp;\Magento\Framework\View\Element\Template { &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;$cacheType; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct( &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Magento\Framework\View\Element\Template\Context&nbsp;$context, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CustomCacheType&nbsp;$cacheType, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array&nbsp;$data&nbsp;=&nbsp;[] &nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct($context,&nbsp;$data); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;cacheType&nbsp;=&nbsp;$cacheType; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;_toHtml() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cacheKey&nbsp;=&nbsp;&#39;my_cache_key&#39;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cacheData&nbsp;=&nbsp;$this-&gt;cacheType-&gt;load($cacheKey); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!$cacheData)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$cacheData&nbsp;=&nbsp;&#39;My&nbsp;cached&nbsp;data&#39;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;cacheType-&gt;save($cacheData,&nbsp;$cacheKey,&nbsp;[],&nbsp;86400);&nbsp;//&nbsp;缓存时间为一天 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$cacheData; &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p>在上面的示例中,我们在 __construct() 方法中注入了我们的自定义缓存类型 CustomCacheType。在 _toHtml() 方法中,我们使用 load() 方法来从缓存中获取数据,并使用 save() 方法将数据保存到缓存中。</p><p><br/></p><p>当缓存启用时,Magento 2 会在页面加载时自动缓存块。Magento 2 会检查缓存是否存在并且没有过期,如果找到了缓存,则直接从缓存中获取内容,否则会生成新的内容并将其保存到缓存中以备下次使用</p><p><br/></p>