2017-09-21 5 views

답변

0

스포일러 : 그것은 거의 깨끗한 로 Shopware의 후크로, 그래서, 컨트롤러

전체 컨트롤러를 교체하고 기능의 확장하는 것보다 더 깨끗한 방법은 없습니다를 교체합니다.

가이드

은 플러그인

class AccountSubscriber implements SubscriberInterface 
{ 
    /** 
    * @return array 
    */ 
    public static function getSubscribedEvents() 
    { 
     return array(
      'Enlight_Controller_Dispatcher_ControllerPath_Frontend_Account' => 'getAccountController' 
     ); 
    } 

    /** 
    * @return string 
    */ 
    public function getAccountController() 
    { 
     return $this->getPath() . '/Controllers/Frontend/AccountExtended.php'; 
    } 

    /** 
    * @return string 
    */ 
    public function getPath() 
    { 
     $plugin = Shopware()->Container()->get('kernel')->getPlugins()['AcmeYourPlugin']; 

     return $plugin->getPath(); 

    } 
} 

단점

불행하게도 일부 컨트롤러에 영향을 미치는 논리를 개인 방법을 새로운 가입자를 추가합니다. 계정 관리자와 동일합니다. 따라서 컨트롤러를 단순히 확장 할 수있는 것은 아닙니다.

결국에는 새로운 경로로 새 컨트롤러를 추가하십시오. 쉽고 깨끗합니다.

0

전체 컨트롤러를 교체하는 것보다 더 깨끗한 방법이 있습니다. 또한 업데이트 호환성이 없기 때문에 컨트롤러 전체를 바꾸지 않는 것이 좋습니다. 최악의 경우 그와 같은 것이 전체 웹 사이트를 죽일 수 있습니다. 얼마 전 정확히 같은 문제를 논의하기 위해 shopware forum(독일어)에 스레드를 만들었습니다. 나는 을 체크 아웃 컨트롤러의 기존 finishAction()으로 확장하려고했습니다.

public function onPostDispatchCheckout(\Enlight_Controller_ActionEventArgs $args) 
{ 
/** @var \Enlight_Controller_Action $controller */ 
$controller = $args->getSubject(); 

/** @var \Enlight_Controller_Request_Request $request */ 
$request = $controller->Request(); 

if ($request->getActionName() !== 'finish') { 
    return; 
} 

// do your stuff here 
} 

그래도 똑같은 문제는 아니지만 절차는 완전히 동일합니다.

우선 당신이 (내 케이스 PostDispatchCheckout 컨트롤러에서) 컨트롤러에 가입 후 당신이 당신이 사용하는이 특정 작업을 변경하는 것으로,

가 있는지 확인하기 위해 귀하의 Bootstrap.php에 컨트롤러를 편집 if-construction을 사용하면 코드가 원하는 액션 (내 경우에는 finishAction())에서 방아쇠됩니다.

이 정보가 도움이되기를 바랍니다. 궁금한 점이 있다면 새로운 액션을 기존 컨트롤러에 추가해야하는 이유입니다. 나는 완전히 새로운 사용자 정의 컨트롤러를 만드는 것보다 더 실용적인 상황이 없다고 생각할 수 있습니다.

종류와 관련,

최대

+0

다음

public static function getSubscribedEvents() { return [ 'Enlight_Controller_Action_Frontend_Account_MyBonus' => 'onAccountMyBonus', ]; } 

및 내 구체적인 사용 사례에서 나는 다른 노선에 두 번째 등록 페이지를 구현했다. 계정 컨트롤러와 동일한 로그인 기능을 사용합니다. ** 문제 ** : Shopware의 계정 컨트롤러는 경우에 따라 Register 컨트롤러에 모든 요청을 전달합니다 (예 : 잘못된 로그인 자격 증명). 컨트롤러 기능을 확장하기위한 게시/발송 방법을 알고 있지만 제 경우에는 불가능했습니다. – Scribdarock

0

당신은 "계정"컨트롤러를 교체해서는 안된다. 당신은 다음과 같이 기존 컨트롤러에 대한 조치를 소유 정의 할 수 있습니다

public function onAccountMyBonus(\Enlight_Event_EventArgs $args) 
    { 
     $args->setProcessed(true); 
     ..... 
     your code here 
}