Shopware의 기존 컨트롤러에 사용자 지정 작업을 추가하는 방법은 무엇입니까?Shopware의 계정 컨트롤러에 작업을 추가하는 방법
예 (URL 구조) :
/account/bonus
/account/custom
/account/...
보통은 그 목적을위한 새로운 컨트롤러를 만드는 쉽고 청소기이지만, 경우에 따라서는 필요가있다.
Shopware의 기존 컨트롤러에 사용자 지정 작업을 추가하는 방법은 무엇입니까?Shopware의 계정 컨트롤러에 작업을 추가하는 방법
예 (URL 구조) :
/account/bonus
/account/custom
/account/...
보통은 그 목적을위한 새로운 컨트롤러를 만드는 쉽고 청소기이지만, 경우에 따라서는 필요가있다.
스포일러 : 그것은 거의 깨끗한 로 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();
}
}
단점
불행하게도 일부 컨트롤러에 영향을 미치는 논리를 개인 방법을 새로운 가입자를 추가합니다. 계정 관리자와 동일합니다. 따라서 컨트롤러를 단순히 확장 할 수있는 것은 아닙니다.
결국에는 새로운 경로로 새 컨트롤러를 추가하십시오. 쉽고 깨끗합니다.
전체 컨트롤러를 교체하는 것보다 더 깨끗한 방법이 있습니다. 또한 업데이트 호환성이 없기 때문에 컨트롤러 전체를 바꾸지 않는 것이 좋습니다. 최악의 경우 그와 같은 것이 전체 웹 사이트를 죽일 수 있습니다. 얼마 전 정확히 같은 문제를 논의하기 위해 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())에서 방아쇠됩니다.
이 정보가 도움이되기를 바랍니다. 궁금한 점이 있다면 새로운 액션을 기존 컨트롤러에 추가해야하는 이유입니다. 나는 완전히 새로운 사용자 정의 컨트롤러를 만드는 것보다 더 실용적인 상황이 없다고 생각할 수 있습니다.
종류와 관련,
최대
당신은 "계정"컨트롤러를 교체해서는 안된다. 당신은 다음과 같이 기존 컨트롤러에 대한 조치를 소유 정의 할 수 있습니다
public function onAccountMyBonus(\Enlight_Event_EventArgs $args)
{
$args->setProcessed(true);
.....
your code here
}
다음
및 내 구체적인 사용 사례에서 나는 다른 노선에 두 번째 등록 페이지를 구현했다. 계정 컨트롤러와 동일한 로그인 기능을 사용합니다. ** 문제 ** : Shopware의 계정 컨트롤러는 경우에 따라 Register 컨트롤러에 모든 요청을 전달합니다 (예 : 잘못된 로그인 자격 증명). 컨트롤러 기능을 확장하기위한 게시/발송 방법을 알고 있지만 제 경우에는 불가능했습니다. – Scribdarock