Tipos de Controllers no Magento 2

컨텍스트리잔도



O que é um controlador?



소프트웨어 MVC(모델-컨트롤러-뷰)를 제어하는 ​​데 필요한 제어 기능입니다.

Um controlador é responsável por intermediar as requisições enviradas pela camada de visualização (View) com as respostas fornecidas pela camada de modelo (Model), processando os dados que o usuário informou e repassando para outras camadas.


코디고



Controllers da loja devem seguir a estrutura de 파스타 \{Vendor}\{Module}\Controller\{ControllerDirectory}\{ControllerName} e Implementar a interface \Magento\Framework\App\ActionInterface, que obriga a classe a implementationar o metodo execute().

Caso esteja utilizando uma versão anterior a 2.4.0 do magento, a interface \Magento\Framework\App\ActionInterface não é estará disponível, então deverá estender a classe \Magento\Framework\App\Action\Action e ajustar o construtor com suas heranças.



제이슨



컨트롤러(controladores) 클래스로 컨트롤러(controladores) podem retornar objetos Json com o tipo mime na resposta.

<?php

namespace {Vendor}\{Module}\Controller\{ControllerDirectory};

use Magento\Framework\Controller\Result\JsonFactory;
use Magento\Framework\App\ActionInterface;
use Magento\Framework\Controller\Result\Json;

class {ControllerName} implements ActionInterface
{
    protected JsonFactory $jsonResultFactory;

    public function __construct(
        JsonFactory $jsonResultFactory
    ) {
        $this->jsonResultFactory = $jsonResultFactory;
    }

    public function execute(): Json
    {
        $data = [
            '{param}' => '{value}',
            'message' => __('{Message to return}'),
            'error' => false
        ];

        $jsonResult = $this->jsonResultFactory->create();
        $jsonResult->setData($data);

        return $jsonResult;
    }
}


날것의



클래스로 컨트롤러(controladores)는 문자열을 계속 입력할 수 있습니다.

<?php

namespace {Vendor}\{Module}\Controller\{ControllerDirectory};

use Magento\Framework\Controller\Result\RawFactory;
use Magento\Framework\App\ActionInterface;
use Magento\Framework\Controller\Result\Raw;

class {ControllerName} implements ActionInterface
{
    protected RawFactory $rawResultFactory;

    public function __construct(
        RawFactory $rawResultFactory
    ) {
        $this->rawResultFactory = $rawResultFactory;
    }

    public function execute(): Raw
    {
        $rawResult = $this->rawResultFactory->create();
        $rawResult->setContents('{Custom message}');

        return $rawResult;
    }
}


리디렉션



클래스로 컨트롤러(controladores) podem ter uma string com a rota de redirecionamento para outra págna como retorno.

<?php

namespace {Vendor}\{Module}\Controller\{ControllerDirectory};

use Magento\Framework\Controller\Result\RedirectFactory;
use Magento\Framework\App\ActionInterface;
use Magento\Framework\Controller\Result\Redirect;

class {ControllerName} implements ActionInterface
{
    protected RedirectFactory $redirectResultFactory;

    public function __construct(
        RedirectFactory $redirectResultFactory
    ) {
        $this->redirectResultFactory = $redirectResultFactory;
    }

    public function execute(): Redirect
    {
        $redirectResult = $this->redirectResultFactory->create();
        $redirectResult->setPath('{router_name}/{controller_directory}/{className}')
            ->setHttpResponseCode(301);

        return $redirectResult;
    }
}


앞으로



클래스로 컨트롤러(controladores) podem ter retorno com um encaminhamento interno para outro controlador sem que o usuário faça uma segunda solicitação.

<?php

namespace {Vendor}\{Module}\Controller\{ControllerDirectory};

use Magento\Framework\Controller\Result\ForwardFactory;
use Magento\Framework\App\ActionInterface;
use Magento\Framework\Controller\Result\Forward;

class {ControllerName} implements ActionInterface
{
    protected ForwardFactory $forwardResultFactory;

    public function __construct(
        ForwardFactory $forwardResultFactory
    ) {
        $this->forwardResultFactory = $forwardResultFactory;
    }

    public function execute(): Forward
    {
        $forwardResult = $this->forwardResultFactory->create();
        $forwardResult->setModule('{module_name}')
            ->setController('{controller_directory}')
            ->forward('{controller_name}')
            ->setParams(['{param}' => '{value}']);

        return $forwardResult;
    }
}


A convenção é que no método setModule() sja definido o nome do diretório do módulo, o setController() deve ser o nome do diretório dentro do diretório Controller do 9104 5 렌더 컨트롤러
É possível passar parametros através de um array. 컨트롤러가 앞으로 나아갈 수 없음을 의미합니다.

페이지



클래스로서 컨트롤러(controladores)는 HTML 커뮤 니티 형식으로 레이아웃을 제어할 수 있습니다.

<?php

namespace {Vendor}\{Module}\Controller\{ControllerDirectory};

use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\App\ActionInterface;
use Magento\Framework\View\Result\Page;

class {ControllerName} implements ActionInterface
{
    protected PageFactory $resultPageFactory;

    public function __construct(
        PageFactory $resultPageFactory
    ) {
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute(): Page
    {
        return $this->resultPageFactory->create();
    }
}


형세



컨트롤러(controladores) 클래스로 HTML e pode ser usado como o Page. Além disso o Layout também podem renderizar o HTML de blocos especícos.

<?php

namespace {Vendor}\{Module}\Controller\{ControllerDirectory};

use Magento\Framework\View\Result\LayoutFactory;
use Magento\Framework\App\ActionInterface;
use Magento\Framework\View\Result\Layout;

class {ControllerName} implements ActionInterface
{
    protected LayoutFactory $resultLayoutFactory;

    public function __construct(
        LayoutFactory $resultLayoutFactory
    ) {
        $this->resultLayoutFactory = $resultLayoutFactory;
    }

    public function execute(): Layout
    {
        return $this->resultLayoutFactory->create()
            ->getLayout()
            ->getBlock('{block.name}')
            ->toHtml();
    }
}


관리자



Controllers do admin devem seguir a estrutura de 파스타 forward() e estender a classe abstrata \{Vendor}\{Module}\Controller\Adminhtml\{ControllerDirectory}\{ControllerName}, que obriga a classe a implementationar o método \Magento\Backend\App\AbstractAction.

<?php

namespace {Vendor}\{Module}\Controller\Adminhtml\{ControllerDirectory};

use Magento\Framework\View\Result\PageFactory;
use Magento\Backend\App\AbstractAction;
use Magento\Backend\App\Action\Context;
use Magento\Framework\View\Result\Page;

class {ControllerName} extends AbstractAction
{
    protected PageFactory $resultPageFactory;

    public function __construct(
        Context $context,
        PageFactory $resultPageFactory
    ) {
        parent::__construct($context);
        $this->resultPageFactory = $resultPageFactory;
    }

    public function execute(): Page
    {
        return $this->resultPageFactory->create();
    }
}


O exemplo Mostra como declalar um controller do tipo Page na área administrativa no Magento, mas pode ser utilizado qualquer um dos tipos de controllers.


피날리잔도



Valores entre chaves ({test}) devem ser alterados na implementação do código.



Habilitando Habilitando as alterações



comando PHP para gerar a configuração das injeções dedependência e todas를 class ausentes que precisam ser geradas(프록시, 인터셉터 등)로 실행합니다.

php bin/magento setup:di:compile


디레토리오스 에 아르키보스



세게 a lista de diretórios e arquivos que devem ser criados.

- app/
  - code/
    - {Vendor}/
        - {Module}/
          - Controller/
            - {ControllerDirectory}/
              - {ControllerName}.php
          - etc/
            - module.xml
          - registration.php
          - composer.json

좋은 웹페이지 즐겨찾기