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
Reference
이 문제에 관하여(Tipos de Controllers no Magento 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/santanaluc94/tipos-de-controllers-no-magento-2-2j68텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)