Magento 2 URL에서 예약어 사용


11

표준 라우팅을 사용하여 다음 형식으로 URL에 응답하는 Magento 2에서 모듈을 생성 할 수 있습니까?

http://magento.example.com/namespace_module/return/index

즉- 두 번째 매개 변수가 PHP 예약 키워드 인 URL 입니다. 위의 문제는 PHP 컨트롤러 클래스 이름을 만드는 것입니다.

Namespace\Module\Controller\Return\Index

와 가진 Return네임 스페이스에 불법 PHP입니다. URL의 최종 매개 변수 (전통적으로 액션이라고 함)가 예약 키워드인지 알고 있습니다.

http://magento.example.com/namespace_module/foo/return

Magento는 컨트롤러 클래스를 만들 수있게 해주었습니다.

Namespace\Module\Controller\Foo\ReturnAction

그러나 두 번째 매개 변수에는 작동하지 않습니다.

표준 Magento 2 라우팅 기술을 사용하여이를 수행 할 수있는 방법이 있습니까?

그렇지 않은 경우이 동작을 얻기 위해 사용자 지정 라우터 개체를 주입하는 일반적인 방법이나이 문제를 해결할 수있는 다른 기술이 있습니까? (에 after플러그인 Magento\Framework\App\Router\ActionList?)

답변:


7

플러그인을 추가했습니다. Magento\Framework\App\Router\ActionList

<!-- File: app/code/Package/Namespace/etc/di.xml -->
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\App\Router\ActionList">
        <plugin name="package_module_magento_framework_app_router_actionlist" type="Package\Module\Plugin\Magento\Framework\App\Router\ActionList"/>
    </type>
</config>

그런 다음 메소드 의 $namespace매개 변수 로 피들get

#File: app/code/Package/Module/Plugin/Magento/Framework/App/Router/ActionList.php
public function beforeGet($subject, $module, $area, $namespace, $action)
{
    if($namespace === 'return')
    {
        $namespace = 'returnaction';
    }
    return [$module, $area, $namespace, $action];
}

이것은 나에게 수업 이름을 주었다

Package\Module\Controller\ReturnAction\Index

이것이 얼마나 좋은 아이디어인지 잘 모르므로 구매자는 조심하십시오.


멋지고 쉬워 보입니다. 특히 액션 이름이 액션 클래스에 매핑되는 것과 같은 방식으로 모든 PHP 예약어로 확장 될 수 있기 때문입니다. 대안은 커스텀 라우터 를 생성하는 것이지만 더 많은 코드가 필요합니다.
Marius

2
몇 가지 의견 만 : 1) 이렇게하면 'return'컨트롤러를 사용하려는 모든 모듈의 네임 스페이스가 변경됩니다. 의도적으로 'catchall'을 작성하지 않는 한, $ module 매개 변수를 확인하여 자신의 모듈과 일치시키는 것이 가장 좋습니다. 2) 네이밍 패리티를 유지하려는 경우, 반환 된 $ namespace는 아마도 'returnController'이어야합니다. 그러면 ReturnController 네임 스페이스 / 파일 경로가 검색됩니다. 그러면로드 \Namespace\Module\Controller\ReturnController\Index가 더 정확 해집니다.
Jeremy Rimpo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.