Magento 2에서 관리 경로 설정


15

핵심 Magento 2 코드를 보면 관리 경로를 설정하는 가지 방법 이있는 것 같습니다 .

첫번째

#File: vendor/magento/module-media-storage/etc/adminhtml/routes.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route id="adminhtml">
            <module name="Magento_MediaStorage" />
        </route>
    </router>
</config>

Magento 1과 유사 adminhtml합니다. 경로 의 모듈 목록에 모듈을 추가하면 Magento가이를 확인합니다.

두번째

#File: vendor/magento/module-cms/etc/adminhtml/routes.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route id="cms" frontName="cms">
            <module name="Magento_Cms" before="Magento_Backend" />
        </route>
    </router>
</config>

경로 ( cms위의 id ) 를 설정 한 다음 모듈을 추가했습니다.

이 중 하나가 Magento 2에서이를 수행하는 "올바른 / 바람직한"방법입니까? 그렇지 않다면 둘 사이의 차이점은 무엇입니까? 즉, 언제 다른 것을 사용할 것입니까?

특정 문제를 해결하지 말고 올바른 방법으로 경로를 만들고 있는지 확인하고 Magento 1 모듈과 비슷한 문제 (아약스 라이브러리, 보안 등)를 피하십시오.

답변:


23

차이점은 URL입니다. URL의 구조는 다음과 같습니다. <areaFrontName>/<moduleFrontName>/<actionPath>/<actionName>

경로 "Adminhtml"에는 areaFrontName과 동일한 moduleFrontName "admin"이 있습니다. "adminhtml"경로 아래의 모든 경로는로 시작합니다 admin/admin.

보다 구체적인 URL을 원한다면 카탈로그처럼 특정 경로를 사용해야합니다. 카탈로그 URL은 모두로 시작합니다 admin/catalog. 이것이 선호되는 방법입니다.

바람직한 구성은 다음과 같습니다.

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route id="cms" frontName="cms">
            <module name="Magento_Cms"/>
        </route>
    </router>
</config>

참고 before="Magento_Backend"필요하지 않습니다


3
이름 지정 ID와 frontName에 대한 설명이 있습니까? 관리 지역과 동일해야합니까? 모듈 이름을 사용해야합니까? id! = frontName인데 왜 작동하지 않습니까?
Sergey Korzhov

4

adminhtml 컨트롤러를 추가하는 방법에 대한 예제를 찾는 동안이 문제를 겪었습니다. 나는 약간의 연구를했고 이것이 내가 찾은 것입니다.

route id="adminhtml"방법은 핵심에서 24 번 사용됩니다.

before="Magento_Backend"방식은 코어에서 31 번 사용됩니다.

adminhtml / routes.xml은 24 + 31 = 55 인 모듈이 50 개뿐입니다. 힌트 # 1.

어떤 유형의 모듈이 어떤 유형을 사용하는지간에 공통 분모를 찾으려고했지만 식별 할 수없는 것 같습니다. 따라서 특정 시점에 변경 사항이 도입되어 두 유형의 타이밍을 확인했을 수 있습니다. 불행히도 대부분의 사람들이 9 월 중순에 새로운 항아리를 소개하기 위해 마지막으로 편집했기 때문에 상당히 어려웠으므로 Github의 히스토리 기능을 사용해야했습니다.

나는 다음 몇 가지 routes.xml 파일 발견 route id="adminhtml"옵션을 사용 또한 를 사용 before="Magento_Backend", 예를 들어 볼 Magento_UrlRewrite의 routes.xml 파일을 . 세 변종 사이에 결정적인 공통점을 찾을 수없는 것 같습니다.

또한 AdvancedPricingImportExport , Integration , MediaStorageEncryptionKey 와 같은 새 모듈 (M1에 없었으므로 이식 할 수 없지만 M2 용으로 새로 작성된)을 확인 before="Magento_Backend"했으며 일부는 사용하지만 일부는 사용 하지 않지만 모두 사용합니다 <route id="adminhtml">태그입니다. 이 중 before="Magento_Backend"2015 년 2 월에없는 태그는 마지막으로 변경되었지만 해당 태그가있는 태그는 모두 해당 날짜 이후 에 편집 되었습니다 .

그래서 나의 예비 결론은 이것이 선호되는 방법이라는 것입니다 (Magento 본사에서 내부적으로 명시 적으로 결정된 것인지 아닌지).

<config xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <router id="admin">
        <route id="adminhtml">
            <module name="Your_Extension" before="Magento_Backend"/>
        </route>
    </router>
</config>

나는 이것에 대한 마 젠토 코어 개발자의 입장을 분명히 듣고 싶습니다.

업데이트 : Anton Kril이 응답했습니다.이를 선호하는 방법에 대한 그의 대답을보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.