控制器controller是如何工作的?
它接收来自终端用户(浏览器或comamnd行)的请求,例如:
1 | http://example.com/route_name/controller/action |
- oute_name是在routing .xml中设置的唯一名称。
- controller是controller文件夹中的文件夹。
- action是一个用execute方法处理请求的类。
1 2 3 4 5 | foreach ($this->_routerList as $router) { try { $actionInstance = $router->match($request); … } |
如果找到控制器类的操作,将运行execute()方法。
如何创建控制器?
要创建控制器,需要在模块的controller文件夹中创建一个文件夹,并在其中声明一个action类。例如,我们为模块 Pfay_Contacts 创建了一个索引控制器和一个索引操作:
步骤1: 首先创建模块的文件夹
从magento目录的根目录转到/app/code文件夹。然后创建一个文件夹“Pfay”和另一个文件夹“Contacts”。
在magento2下声明它的模块
现在您已经创建了模块的文件夹,您必须向magento“声明”模块。为此,我们将创建 module.xml文件。模块/etc文件夹中的module.xml文件如下:
1 2 3 4 5 6 7 8 | <?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> |
步骤2: 我们也将创建文件“ registration file”。进入app/code/Pfay/Contacts,创建 registration.php是这样的:
1 2 3 4 5 6 | <?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Pfay_Contacts', __DIR__ ); |
当您启动以下命令时:
1 | php bin/magento setup:upgrade |
你会看到这条线
1 | 'Pfay_Contacts' => 1 |
步骤3: 在文件夹app/code/Pfay/Contacts/Controller中,创建一个文件夹测试,并在下面创建索引 Index.php文件如下:
1 2 3 4 5 6 7 8 9 | <?php namespace Pfay\Contacts\Controller\Test; class Index extends \Magento\Framework\App\Action\Action { public function execute() { die('test index'); } } |
步骤4: 创建访问控制器的路由, 为了通过前端访问我们的模块,您必须为模块的前端创建路由。这里我们想通过url www.magento2.lan/contacts/访问模块。我们将在etc文件夹中创建一个“ frontend”文件夹,然后插入 routes.xml文件。 文件routes.xml必须是这样的:
1 2 3 4 5 6 7 8 | <?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> |
我们使用“ standard”路由器,允许访问我们的magento2模块的前端部分!我们添加带有id“contacts”的路由来识别它,以及frontName“contacts”,这是您访问前端模块的关键url。在此路径中,然后使用name属性定义模块元素,该属性包含“名称空间”+“模块名称”。
注意:如果你创建后台路由则id应该是admin。
步骤5: 关于控制器的组织,
1 | http//www.magento2.lan/contacts/test/index 或者 http//www.magento2.lan/contacts/test 都可以访问 |
注意在访问之前:要做的以下几点工作
1 2 3 4 5 6 7 8 | php bin/magento cache:clean php bin/magento module:enable --clear-static-content Pfay_Contacts 开启模块 php bin/magento module:status php bin/magento setup:upgrade php bin/magento setup:di:compile php bin/magento setup:static-content:deploy -f 完成以上步骤才能正式访问,谨记! |
如果你想了解怎么在controller里面调用helper类的方法,请访问这里 https://www.sky8g.com/technology/1957/
希望以上对你有帮助,如遇到不懂得地方请留言。谢谢你的阅读。