Magento 2中的控制器Controller
作为位于模块控制器controller文件夹中的类,控制器controller负责特定的URL或URL组。在Magento 2中,控制器controller是MVC流程的重要组成部分。与Magento 1相比,Magento 2中的控制器controller是结构化的,它们以不同的方式工作。当Magento 1控制器controller有多个动作action时,Magento 2控制器controller只有一个由前端控制器controller调用的执行方法。对于每个动作action,我们都有一个带有execute方法的控制器controller类。路由器匹配控制器动作类时调用Execute方法,它负责返回对前端控制器的响应。控制器有两种类型:前端和管理员。它们具有类似的工作流程,但管理控制器具有其他权限检查方法
在Magento 2中创建自定义控制器controller
要创建自定义控制器,我们需要执行以下步骤:
第1步:创建routers.xml文件
etc / frontend / routes.xml – 前端的路由配置; 为了演示,我们将匹配“magentofronttest”作为frontname(域名后的url的一部分 – 例如:www.magentotest.net/magentofronttest/)
1 2 3 4 5 6 7 | <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd"> <router id="standard"> <route id="magentotestfrontend" frontName="magentofronttest"> <module name="Magento_CustomControllers" /> </route> </router> </config> |
第2步:自定义控制器controller配置
– router:id – standard(frontend)/ admin
– route:id – 您的唯一路由ID
– route:frontName – url中的唯一名称,这是url的第一部分在基础路由器中(www.yourwebsite.com/frontName/actionpath/actionclass/)
etc / adminhtml / routes.xml – 为admin配置路由,为了演示,我们将匹配“magentoadmintest”作为frontname(/ admin /之后的url的一部分)
1 2 3 4 5 6 7 | <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd"> <router id="admin"> <route id="magentoadmintest" frontName="magentoadmintest"> <module name="Magento_CustomControllers" before="Magento_Backend" /> </route> </router> </config> |
第3步:创建动作控制器controller
Controller / Actionpath / Actionclass.php
现在我们将为两个控制器配置创建动作类。在前端让我们为url siteurl / magentoronttest / demonstration / sayhello /创建动作路径和动作类。您可以在Controller文件夹中看到我们需要Demonstration文件夹(这称为动作路径),在该文件夹中我们需要Sayhello.php控制器动作类:
Controller / Demonstration / Sayhello.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php namespace Magento\CustomControllers\Controller\Demonstration; class Sayhello extends \Magento\Framework\App\Action\Action { /** * say hello text */ public function execute() { die("Hello - Magento\\CustomControllers\\Controller\\Demonstration\\Sayhello - execute() method"); } } |
对于管理员控制器,让我们匹配url siteurl / admin / magentoadmintest / demonstration / sayadmin /。为此,我们需要Controller / Adminhtml中的Demonstration文件夹,并且在该动作类中我们需要创建Sayadmin.php
控制器/ Adminhtml /示范/ Sayadmin.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php namespace Magento\CustomControllers\Controller\Adminhtml\Demonstration; class Sayadmin extends \Magento\Backend\App\Action { /** * say admin text */ public function execute() { die("Admin - Magento\\CustomControllers\\Controller\\Adminhtml\\Demonstration\\Sayadmin - execute() method"); } } |
请注意,默认情况下_isAllowed将返回true,并且要创建自定义权限,您必须在该方法下添加check。为了演示,我们将保留默认值,以便用户可以访问该控制器。
注意: 添加新控制器后,从Magento root中的控制台刷新所有内容:
1 | php bin/magento setup:upgrade |