Vejo que em todos os lugares em que a solicitação está envolvida no Magento 2, a solicitação é uma implementação de \Magento\Framework\App\RequestInterface
.
Essa interface não contém os métodos getPost
(usados em \Magento\Catalog\Controller\Adminhtml\Category\Widget\CategoriesJson
) e getPostValue
(usados \Magento\Catalog\Controller\Adminhtml\Product\Save
), mas eles ainda são chamados.
Tudo bem supor que esses métodos sempre existam para solicitações http?
ou devo usar outra coisa em meus módulos para obter os $_POST
dados?
magento2
http-request
Marius
fonte
fonte
Respostas:
Não pense assim. Eles estão quebrando seu próprio contrato de classe. Como você pode imaginar, isso não é nada de OOP.
De acordo com a recomendação usual, eu evitaria usar qualquer coisa que não esteja declarada
Magento\Framework\App\RequestInterface
porque: a) você fará Liskov feliz eb) porque logo perceberá o problema e o corrigirá (espero), quebrando assim o seu código (ou não; mas se o fizerem, são justificados: você não estava usando o contrato da API, certo?).Se eles não corrigirem, terão uma implementação de API muito capaz (ou seja
Magento\Framework\App\Request\Http
) que ninguém realmente usará.Sempre fique dentro do contrato!
fonte
RequestInterface
. Mas o que você está dizendo parece ressonável. Vou evitar o máximo possível esses métodos.if($this->getRequest() instanceof \Magento\Framework\App\Request\Http) {
- se essa verificação for aprovada, você poderá usar esses parâmetros!getPostValue()
está escrito emlib\internal\Magento\Framework\HTTP\PhpEnvironment\Request.php
então obtém o
getPost
valor devendor\zendframework\zend-http\src\Request.php
Espero que você consiga pelo menos alguma dica.
E sim, você pode usar
Para obter
post
valor ,, você também pode verificar oContact
módulo para obter algumas dicasfonte
Para obter os dados do Post no controlador, você precisa usar o seguinte na sua função de execução.
fonte
No Magento 2.1, se obtivermos o objeto de solicitação chamando
$this->getRequest()
, ele retornará oMagento\Framework\App\Request
que é estendidoMagento\Framework\HTTP\PhpEnvironment\Request
. é por isso que o método getPostValue pode ser chamado.Eu tive o problema ao tentar criar um teste de unidade para o meu controlador que chame o getPostValue. Como o getPostValue não está definido no RequestInterface, em vez de criar um objeto simulado para o RequestInterface diretamente, criamos o objeto simulado para
Magento\Framework\App\Request\Http
.fonte
Não.
O método será alterado na versão futura se não estiver na interface. Devemos usar os métodos na interface, tanto quanto possível. Devido ao contrato da API, os métodos existentes na API não serão alterados, exceto nas atualizações de versão principais.
Sim.
Na interface
Magento\Framework\App\RequestInterface
, o métodogetParams()
pode obter a matriz de dados de postagem, o métodogetParam($key, $defaultValue = null)
pode obter os dados específicos na postagem.fonte