Magento 2 | Erstellen Sie eine Frontend-Route


9

Ich möchte eine benutzerdefinierte Frontend-Route erstellen. Es sollte diesen Link haben:

www.mysite.com/myroute

<?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="myroute" frontName="myroute">
            <module  />
        </route>
    </router>
</config>

Ich habe die Route bereits erstellt , weiß aber nicht, wo ich den Controller platzieren soll . Kannst du mir bitte helfen?

Vielen Dank!


Sie können eine Antwort akzeptieren. Wenn es für Sie hilfreich sein wird :)
Rohan Hapani

Antworten:


9

Hier ist ein vollständiges Beispiel für die Funktionsweise der Fronted Route. Es handelt sich um eine Kombination aus Controller , Layout , Block und Vorlage .

Route

app / code / QaisarSatti / HelloWorld / etc / frontend / route.xml

<?xml version="1.0"?>
<!--
/**
 * Simple Hello World Module
 *
 * @category QaisarSatti
 * @package QaisarSatti_HelloWorld
 * @author Muhammad Qaisar Satti
 * @Email qaisarssatti@gmail.com
 *
 */-->   
<config 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
  <router id="standard">
    <route id="helloworld" frontName="helloworld">
      <module name="QaisarSatti_HelloWorld" />
    </route>
  </router>
</config>

Regler

app / code / QaisarSatti / HelloWorld / Controller / Index / Index.php

<?php
/**
 * Simple Hello World Module
 *
 * @category QaisarSatti
 * @package QaisarSatti_HelloWorld
 * @author Muhammad Qaisar Satti
 * @Email qaisarssatti@gmail.com
 *
 */

namespace QaisarSatti\HelloWorld\Controller\Index;

class Index extends \Magento\Framework\App\Action\Action
{
    public function execute()
    {
        $this->_view->loadLayout();
        $this->_view->renderLayout();
    }
}

Layoutdatei

app / code / QaisarSatti / HelloWorld / view / frontend / layout / helloworld_index_index.xml

<?xml version="1.0"?>
<!--
/**
 * Simple Hello World Module
 *
 * @category QaisarSatti
 * @package QaisarSatti_HelloWorld
 * @author Muhammad Qaisar Satti
 * @Email qaisarssatti@gmail.com
 *
 */-->
<page 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      layout="1column" 
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
  <body>
    <referenceContainer name="content">
      <block 
            class="QaisarSatti\HelloWorld\Block\HelloWorld" 
            name="HelloWorld" 
            template="QaisarSatti_HelloWorld::HelloWorld.phtml">
        .
      </block>
    </referenceContainer>
  </body>
</page>

Vorlagendatei

app / code / QaisarSatti / HelloWorld / view / frontend / templates / HelloWorld.phtml

<?php
/**
 * Catalog Product Rewrite Helper
 *
 * @category QaisarSatti
 * @package QaisarSatti_HelloWorld
 * @author Muhammad Qaisar Satti
 * @Email qaisarssatti@gmail.com
 *
 */
echo 'Hello World';

Benutzerdefinierter Block

app / code / QaisarSatti / HelloWorld / Block / HelloWorld.php

<?php
/**
 * Simple Hello World Module
 *
 * @category QaisarSatti
 * @package QaisarSatti_HelloWorld
 * @author Muhammad Qaisar Satti
 * @Email qaisarssatti@gmail.com
 *
 */

namespace QaisarSatti\HelloWorld\Block;

class HelloWorld extends \Magento\Framework\View\Element\Template
{
    public function _prepareLayout()
    {
        parent::_prepareLayout();
        $this->pageConfig->getTitle()->set(__('First Hello World Module'));
        return $this;
    }
}

Referenz


4

Erstellen Sie den Index.php- Controller im folgenden Pfad:

/ app / code / UO / NewsletterUV / Controller / Index /

<?php
namespace UO\NewsletterUV\Controller\Index;

use Magento\Framework\App\Action\Action;

class Index extends Action
{
    public function execute()
    {
        echo "Controller call successfully";
    }
}

+1, um Dinge nicht zu komplizieren und zu zeigen, dass Sie die Ausgabe direkt erzeugen können, ohne Layout, Vorlage und Block definieren zu müssen.
jdhildeb

3

Versuche dies:

Erstellen Sie eine PHP-Datei app/code/UO/NewsletterUV/Controller/Index/mit Index.php.

Der Code sollte in dieser Datei so sein.

namespace UO\NewsletterUV\Controller\Index;

use Magento\Framework\App\Action\Action;

/**
 * Class Index
 * @package UO\NewsletterUV\Controller\Index\Index
 */
class Index extends Action
{


    /**
     * Function execute
     * @return \Magento\Framework\View\Result\Page
     */
    public function execute()
    {  
        echo "Rout Called";

    }
}

3

Für diese Route muss sich der Controller in befinden UO/NewsletterUv/Controllers ...

Wenn Sie also auf www.mysite.com/myroute-> zugreifen , wird es aufgerufenUO/Newsletter/Controllers/Index/Index.php

Wenn Sie auf www.mysite.com/myroute/my-action-> zugreifen , wird es anrufen UO/Newsletter/Controllers/MyAction/Index.php.

Und so weiter...

Der Inhalt des Controllers sieht aus wie Rohans Antwort.

Ich hoffe, es hilft.


Dies ist eine hilfreiche Information. Aber ich bin mir ziemlich sicher, dass es Controller ist, nicht Controller.
jdhildeb

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.