Js 또는 html 파일에서 기본 URL 또는 동적 URL 가져 오기


16

간단히 정의 mage/url하고 다음 과 같이 사용할 수 있으면 프런트 엔드에서 동적 URL을 얻 습니다.url.build('<Modulename>/<controllername>/<action>/')

백엔드에 대해 동일한 것을 시도했을 때 예상 결과를 반환하지 않았습니다.

현재 URL을 제공하고 내가 지정한 경로를 추가합니다.

누구나 이것이 어떻게 작동하는지 설명 할 수 있습니까? baseUrl을 어딘가에 정의해야합니까?

답변:


9

내가 달성하고 싶었던 설명에 대한 Khoa 덕분에 관리자 형식으로 아약스로 외부 URL을 호출하고 있습니다. 정적 경로를 사용하고 있었으므로 동적 경로를 원했습니다. 여기 내가 한 일이 있습니다.

내 레이아웃 XML 파일

<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>

레이아웃 Phtml 파일 baseUrl을 정의했습니다.

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

기본 URL을 반환하는 내 차단 파일

<?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 . '/';
    }
}

이제 내 js 파일에서 그대로 사용할 수 있습니다.

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

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

8

js 파일에서만 그렇게하십시오.

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

결과는 다음과 같습니다.

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

이것은 백엔드에서 나에게 같은 결과를주지 않을 것입니다. 따라서 블록의 첫 번째 URL을 정의해야합니다
Priyank

그러나 당신의 질문에 당신 은 js에 URL 을 원한다고 언급 하므로 이것이 도움이 될 것입니다. 이제 어떤 파일에서 URL을하십니까 ? 문제가 해결 되었습니까?
Nitesh

url.build () 함수를 사용하여 사이트의 기본 URL을 얻는 방법은 무엇입니까?
Prince Patel

이것을 사용하여-> define ([ 'mage / url']
Nitesh

6

우리가 알아야 할 가장 중요한 것 :에 대한 기본 URL을 설정해야합니다url.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;
        }

기본적으로 기본 URL을 설정하는 위치는 두 가지입니다.

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();?>');

따라서 관리자는 관리자 기본 URL을 설정해야합니다.


1
알았어. 그러나 구현해야 할 관리 양식에 대해 이야기합니다. 내 양식은 ui 구성 요소를 사용하여 만들어 지므로 한 페이지 또는 배송에 정의 된 URL을 어떻게 설정할 수 있습니까?
Priyank

안녕하세요, 문제에 대한 자세한 내용을 설명 할 수 있습니다. UI 구성 요소 소개 : magento.stackexchange.com/questions/97291/...
코아 TruongDinh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.