系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》
本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。
在Magento 2中,路由(Routes)是用于将HTTP请求路由到正确的控制器和操作的机制。以下是一个简单的示例,演示如何在Magento 2中定义和使用路由:
定义路由
要定义一个路由,您需要在模块的 etc/frontend/routes.xml 文件中添加以下内容:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="standard"> <route id="my_module" frontName="my_module"> <module name="My_Module"/> </route> </router> </config>
上面的示例定义了一个名为 my_module 的前端路由,它将请求路由到名为 My_Module 的模块。
创建控制器
创建控制器是为路由处理请求的关键。在Magento 2中,控制器位于 Controller 目录中。以下是一个简单的示例:
<?php
namespace My\Module\Controller\Index;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class Index extends Action
{
/**
* @var PageFactory
*/
protected $resultPageFactory;
/**
* Constructor
*
* @param Context $context
* @param PageFactory $resultPageFactory
*/
public function __construct(Context $context, PageFactory $resultPageFactory)
{
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
}
/**
* Execute action based on request and return result
*
* @return \Magento\Framework\Controller\ResultInterface
*/
public function execute()
{
return $this->resultPageFactory->create();
}
}上面的示例创建了一个名为 Index 的控制器,该控制器返回一个页面。
处理请求
现在,您可以处理来自前端路由的请求。以下是一个简单的示例:
<?php
namespace My\Module\Controller\Index;
use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class Index extends Action
{
/**
* @var PageFactory
*/
protected $resultPageFactory;
/**
* Constructor
*
* @param Context $context
* @param PageFactory $resultPageFactory
*/
public function __construct(Context $context, PageFactory $resultPageFactory)
{
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
}
/**
* Execute action based on request and return result
*
* @return \Magento\Framework\Controller\ResultInterface
*/
public function execute()
{
$resultPage = $this->resultPageFactory->create();
$resultPage->getConfig()->getTitle()->set(__('My Page Title'));
return $resultPage;
}
}上面的示例设置了页面标题并返回结果页面。