本教程是magento2漫长系列教程中的第2部分。 它将随着平台的发展而逐步更新。 现在,您将学习如何在Magento2下创建控制器及其动作。 如果您不知道magento(v1)没问题,我将在此进行讨论,但是不必知道magento 1.x平台即可掌握magento2上的本教程。
在本教程中,您将为magento2创建一个通讯簿管理模块,该模块具有管理界面,前台,对数据库的访问权限以及其他所有功能。
首先创建模块的文件夹
从magento目录的根目录转到/ app / code文件夹。然后创建一个文件夹“ Pfay”和另一个文件夹“ Contacts”。
然后在“Contacts”文件夹中创建一个文件夹“ Controller”和另一个目录“ etc”。
命名空间:
您的模块位于Pfay命名空间中。您将在此文件夹中“存储”要创建的模块。
请注意,切勿修改magento2的“核心”文件,即/ app / code / Magento文件夹,否则,如果尝试更新平台,将会遇到很大的问题。
在magento2下声明其模块
现在,您已经创建了模块的文件夹,您必须将其“声明”为magento的模块。为此,我们将在模块的/ etc文件夹中创建module.xml文件,如下所示:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Pfay_Contacts" setup_version="2.0.0">
<sequence>
<module name="Magento_Cms"/>
</sequence>
</module>
</config>
我们也将创建文件“注册文件”。转到app / code / Pfay / Contacts,然后创建registration.php,如下所示:
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Pfay_Contacts',
__DIR__
);
当您启动以下命令时:
php bin/magento setup:upgrade
您会看到这一行
'Pfay_Contacts' => 1
被插入文件app / etc / config.php中。这使您知道模块处于活动状态。对于那些知道magento(1.X)的人来说,您必须知道在magento2下,您不再需要在/ app / etc / module /中声明您的模块,在设计中使用模板等等,现在使用magento2 t与模块有关的所有内容都在其文件夹中。在magento2中,您有两个概念:“强依赖性”和“弱依赖性”。
magento2中的模块依赖性
强烈的模块依赖关系
恢复:如果不存在依赖关系,则Magento2不起作用。
该模块包含其他模块,类,静态方法,类的静态属性,接口等的逻辑代码。您需要提醒的是,dependecy模块不存在… 404!
对模块的依赖关系弱
:如果不存在依赖关系,Magento2仍然可以
工作。通常,它扩展了其他模块的功能,它首先检查依赖项的可用性。如果它不存在,它不会抛出异常……它会处理它。
创建控制器
在文件夹app / code / Pfay / Contacts / Controller中,创建一个文件夹Test,然后在其中创建Index.php文件,如下所示:
<?php
namespace Pfay\Contacts\Controller\Test;
class Index extends \Magento\Framework\App\Action\Action
{
public function execute()
{
die('test index');
}
}
小心一点,您会注意到,当我们定义文件的命名空间时,开头没有\,而扩展名中只有一个….
简而言之,这里我们创建一个Index类,它实际上是一个magento2 Action。实际上,在magento2中,不再有控制器。现在,您可以通过操作创建文件。这些动作扩展了核心类 \ Magento \ Framework \ App \ Action \ Action,并且必须具有函数execute()。现在,在magento 1.x中的一个控制器中对动作进行分组时,现在将在文件夹中对动作类进行分组。
创建访问控制器的路径
为了通过前端访问我们的模块,您必须为我们的模块的前端创建路由。在这里,我们要通过URL www.magento2.lan / contacts /访问我们的模块。我们在“ etc”文件夹中创建一个“ frontend”文件夹,然后插入“ routes.xml”文件。
文件route.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="contacts" frontName="contacts">
<module name="Pfay_Contacts" />
</route>
</router>
</config>
我们使用允许访问magento2模块前端部分的“标准”路由器!然后,我们添加ID为“ contacts”的路由以进行标识,并添加frontName“ contacts”(这是用于访问前端模块的关键URL)。然后,在此路由中,我们使用名称属性定义模块元素,该属性包含“名称空间” +“模块名称”。
供您参考,您还应该使用routes.xml类型的文件在后台中创建路径。
关于控制器组织的一点
从模块的根目录开始,我们有文件
/ Controller / Test / Index,
我们将在本教程的后续步骤中告诉我们控制器Test的操作索引是Action 。我们将通过访问URL来访问它
http//www.magento2.lan/contacts/test/index
如果未在url中指定动作,则名为index的动作是magento默认将采取的动作。我们可以通过以下方式访问它:
http//www.magento2.lan/contacts/test/
在这两个URL上,您将显示“测试索引”显示。
如果您想以其他动作查看为例,我们可以在包含以下内容的Test文件夹中创建另一个文件View.php:
<?php
namespace Pfay\Contacts\Controller\Test;
class View extends \Magento\Framework\App\Action\Action
{
public function execute()
{
die('test index');
}
}
网址:
http//www.magento2.lan/contacts/test/view
您将看到显示的“测试视图”
!为什么它对我不起作用?一些解决方案…
-不行吗?清空
后台的缓存>系统>缓存管理,并禁用所有缓存
本文翻译致:https://www.pierrefay.com/magento2-training/create-controller-action-magento2.html