Magento2 Route Management and Controllers

在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的区域代码有:

  1. frontend (Storefront)
  2. adminhtml (Magento Admin)
  3. base
  4. webapi_rest
  5. webapi_soap
  6. graphql
  7. 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,将跳转到 登录界面。

注册登录

注册,登录之后将显示如下效果:

add添加界面

到现在为止的文件夹结构