接下来,创建前端控制器。 ***** 路由声明 创建前端控制器时,需要新建etc/frontend/routes.xml文件,来声明前端控制器的名称。 File:app/code/Lyh/Test/etc/frontend/routes.xml 在routes.php中编写如下代码: ``` <?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="test" frontName="test"> <module name="Lyh_Test" before="Magento_Core"/> </route> </router> </config> ``` router标签说明: id = standard 表示前端路由; route标签说明: id : 对于router的唯一标识名; frontName : 前端URL的控制名称; name : 声明module的名称; before : 表示在定义module之前加载; after : 表示在定义moduel之后加载; 备注:“before” et “after” 在创建module时不是必须的. ***** 创建前端控制器 比如我们的URL为:[http://192.168.31.58/test](http://192.168.31.58/test) 继续创建文件 File:app/code/Lyh/Test/Controller/Index/Index.php 控制器中代码如下: ``` <?php namespace Lyh\Test\Controller\Index; //这里使用了php的命名空间 use Magento\Framework\App\Action\Action; class Index extends Action { /** @var \Magento\Framework\View\Result\Page */ protected $resultPageFactory; /*** @param \Magento\Framework\App\Action\Context $context*/ public function __construct(\Magento\Framework\App\Action\Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory) { $this->resultPageFactory = $resultPageFactory; parent::__construct($context); } /** * @return \Magento\Framework\View\Result\PageFactory */ public function execute() { echo "this is Lyh_Test_Controller_Index_Index"; die(); } } ``` 现在访问刚才的路由URL,即:[http://192.168.31.58/test](http://192.168.31.58/test)就可以看到浏览器输出内容了。 ***** 自定义URL 上面我们的URL很简单,为http://192.168.31.58/test,实际上magento将它转化成了http://192.168.31.58/test/index/index, test为/etc/routes.xml下我们定义的frontName名: 第一个index是位于Controller文件夹下的Index文件夹名, 第二个index是位于Index文件夹下的Index.php名, 比如我们现在要我们的URL为:[http://192.168.31.58/test/hello/world](http://192.168.31.58/test/hello/world) 我们该如何创建文件呢? 示例如下: File:`app/code/Lyh/Test/Controller/Hello/World.php` ``` Lyh |---Test |--Controller |--Hello |---World.php ``` World.php内容如下: ``` <?php namespace Lyh\Test\Controller\Hello; use Magento\Framework\App\Action\Action; class World extends Action { /** @var \Magento\Framework\View\Result\Page */ protected $resultPageFactory; /*** @param \Magento\Framework\App\Action\Context $context*/ public function __construct(\Magento\Framework\App\Action\Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory) { $this->resultPageFactory = $resultPageFactory; parent::__construct($context); } /** * @return \Magento\Framework\View\Result\PageFactory */ public function execute() { echo "this is Lyh_Test_Controller_Hello_World"; die(); } } ```