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.