在Magento 2中,标准网址或路由包含三部分,
i) Front Name
ii) Controller Name
iii) Action Name
我们需要在etc / frontend文件夹下的routes.xml文件中注册前台名称。frontend 是前端的一个区号,指的是前端区域。 如果我们要为管理员创建路由,则必须将adminhtml作为区号。
<?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="blogmanager" frontName="blog">
<module name="Yshuq_BlogManager" />
</route>
</router>
</config>
在这里,路由ID为blogmanager,frontName为blog。 通常,为简单起见,我们将相同的值用于路由ID和前台名称。 多个模块可以共享同一条路由,因此我们需要在route标签中指定我们的模块。
Magento 2的区域代码有:
- frontend (Storefront)
- adminhtml (Magento Admin)
- base
- webapi_rest
- webapi_soap
- graphql
- crontab
我们需要创建一个名称为Controller的文件夹,其中将包含所有与控制器相关的文件夹和文件。 现在,我们需要创建一个具有控制器名称(例如Manage)的文件夹,例如Controller / Manage,并在manage文件夹下,我们需要创建操作文件Add.php。
<?php
namespace Yshuq\BlogManager\Controller\Manage;
use Magento\Customer\Controller\AbstractAccount;
use Magento\Framework\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class Add extends AbstractAccount
{
public function __construct(
Context $context,
PageFactory $resultPageFactory
) {
$this->resultPageFactory = $resultPageFactory;
parent::__construct($context);
}
public function execute()
{
echo('<h1>Hello World</h1>');
}
}
命名空间应遵循目录结构,而类名将是文件名。
我们的操作是扩展Magento \ Customer \ Controller \ AbstractAccount,以便只能由登录的客户访问此操作。 如果某个动作扩展了Magento \ Framework \ App \ Action \ Action,那么来宾用户也可以访问该动作。
当我们访问URL时,将调用execute函数。 该网址由frontName / controllerName/actionName给出,在本例中为blog/manage/add。
请注意,由于我们正在扩展Magento \ Customer \ Controller \ AbstractAccount类,因此我们需要先登录才能访问,否则它将重定向到登录页面。 如果遇到任何错误,请运行di compile命令来编译代码。在这里必须执行setup:di:compile编译操作。
php bin/magento setup:di:compile
执行上面的编译之后,在地址输入:http://local236.com/blog/manage/add,将跳转到 登录界面。
注册,登录之后将显示如下效果:
到现在为止的文件夹结构