Obter URL base ou URL dinâmico Para visualizar arquivos Js ou html


16

Eu descobri para obter um URL dinâmico no front-end, se precisar, posso simplesmente definir mage/urle usá-lo comourl.build('<Modulename>/<controllername>/<action>/')

Quando tentei a mesma coisa para o back-end, não retornou o resultado esperado.

Ele forneceu o URL atual e anexou o caminho que eu havia fornecido.

Alguém pode explicar como isso funciona. Preciso definir o baseUrl em algum lugar?

Respostas:


9

Obrigado a Khoa por sua explicação, o que eu queria alcançar é que, no meu formulário de administrador, estou chamando um URL externo com ajax. Eu estava usando um caminho estático, então queria dinamicamente. Então aqui está o que eu fiz.

Arquivo XML do meu layout

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
                <uiComponent name="namespace_modulename_form"/>
                <block class="Namespace\Modulename\Block\Adminhtml\Edit" name="edit" template="Namespace_Modulename::edit.phtml" />
        </referenceContainer>
    </body>
</page>

Arquivo Phtml de layout Eu defini o baseUrl.

    <script>
        require([
            'mage/url'
        ], function(url) {
            return url.setBaseUrl('<?php /* @escapeNotVerified */ echo $block->getAdminBaseUrl();?>');
        })
    </script>

Meu arquivo de bloco que retorna o URL base

<?php

namespace Namespcae\Modulename\Block\Adminhtml;

class Edit extends \Magento\Framework\View\Element\Template
{

    protected $_configReader;

    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Framework\App\DeploymentConfig\Reader $configReader
    ) {
        $this->_configReader = $configReader;
        parent::__construct($context);
    }

    public function getAdminBaseUrl(){
        $config = $this->_configReader->load();
        $adminSuffix = $config['backend']['frontName'];
        return $this->getBaseUrl() . $adminSuffix . '/';
    }
}

Agora nos meus arquivos js eu posso usá-lo como.

define([
    'Magento_Ui/js/form/element/abstract',
    'mage/url'
], function (Abstract, url) {
    'use strict';

    return Abstract.extend({
        url.build('namespace_module/controllername/action/');
    });
});

8

Apenas faça isso apenas no arquivo js

define(['mage/url'], 
  function (url) {
   'use strict';
    var url = url.build('<modulename>/<controllername>/<actionname>');
});

O resultado será:

http://ip_address/<modulename>/<controllername>/<actionname>

Isso não vai me dar o mesmo resultado no back-end. Então precisamos definir a base da url no primeiro bloco
— Priyank

Mas na sua pergunta você menciona que deseja URL em js, portanto isso será útil. Agora me diga em qual arquivo você quer URL . O seu problema está resolvido ou não?
— Nitesh

Como obtemos o URL base do site usando a função url.build ()?
— Prince Patel

usando isto -> define (['mage / url']
— Nitesh 24/07

6

A coisa mais importante que precisamos saber: precisamos definir o URL base paraurl.build('<Modulename>/<controllername>/<action>/') :

lib / web / mage / url.js

        setBaseUrl: function (url) {
            baseUrl = url;
        },
        build: function(path) {
            if (path.indexOf(baseUrl) != -1) {
                return path;
            }
            return baseUrl + path;
        }

Basicamente, existem dois lugares onde definir o URL base:

vendor/magento/module-checkout/view/frontend/templates/onepage.phtml vendor/magento/module-checkout/view/frontend/templates/cart/shipping.phtml

return url.setBaseUrl('<?php /* @escapeNotVerified */ echo $block->getBaseUrl();?>');

Portanto, em seu administrador, você deve definir o URL da base de administração.


1
Ok, entendi. Mas falando sobre formulários de administração, onde eu preciso que isso seja implementado. Meu formulário é criado usando o componente da interface do usuário. Como posso definir o URL conforme definido em uma página ou no envio?
— Priyank #

Olá, você pode explicar mais detalhes sobre o seu problema. Sobre componente Ui: magento.stackexchange.com/questions/97291/...
— Khoa TruongDinh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.