我目前正在开发一个Shopware插件来展示从注册页面登录页面。实现工作正常。
但是,我遇到了一个问题,Shopware指示Auth Controller已成为内部控制器,不再可访问。我正在寻找一个替代类,可以用于此目的。
你能推荐一个替代类来代替Auth Controller吗?
<?php declare(strict_types=1);
...
/**
* @RouteScope(scopes={"storefront"})
*/
class AuthControllerDecorator extends AuthController
{
private AuthController $decoratedAuthController;
private AccountLoginPageLoader $loginPageLoader;
private AbstractSendPasswordRecoveryMailRoute $sendPasswordRecoveryMailRoute;
private AbstractResetPasswordRoute $resetPasswordRoute;
private AbstractLoginRoute $loginRoute;
private AbstractLogoutRoute $logoutRoute;
private StorefrontCartFacade $cartFacade;
private AccountRecoverPasswordPageLoader $recoverPasswordPageLoader;
private SalesChannelContextServiceInterface $salesChannelContext;
public function __construct(
AuthController $decoratedAuthController,
AccountLoginPageLoader $loginPageLoader,
AbstractSendPasswordRecoveryMailRoute $sendPasswordRecoveryMailRoute,
AbstractResetPasswordRoute $resetPasswordRoute,
AbstractLoginRoute $loginRoute,
AbstractLogoutRoute $logoutRoute,
StorefrontCartFacade $cartFacade,
AccountRecoverPasswordPageLoader $recoverPasswordPageLoader,
SalesChannelContextServiceInterface $salesChannelContextService
) {
$this->decoratedAuthController = $decoratedAuthController;
$this->loginPageLoader = $loginPageLoader;
parent::__construct(
$this->loginPageLoader = $loginPageLoader,
$this->sendPasswordRecoveryMailRoute = $sendPasswordRecoveryMailRoute,
$this->resetPasswordRoute = $resetPasswordRoute,
$this->loginRoute = $loginRoute,
$this->logoutRoute = $logoutRoute,
$this->cartFacade = $cartFacade,
$this->recoverPasswordPageLoader = $recoverPasswordPageLoader,
$this->salesChannelContextService = $salesChannelContextService
);
}
/**
* @Route("/account/login", name="frontend.account.login.page", methods={"GET"})
*/
public function loginPage(Request $request, RequestDataBag $data, SalesChannelContext $context): Response
{
/** @var string $redirect */
$redirect = $request->get('redirectTo', 'frontend.account.home.page');
$customer = $context->getCustomer();
if ($customer !== null && $customer->getGuest() === false) {
$request->request->set('redirectTo', $redirect);
return $this->createActionResponse($request);
}
$page = $this->loginPageLoader->load($request, $context);
return $this->renderStorefront('@Storefront/storefront/page/account/login/index.html.twig', [
'redirectTo' => $redirect,
'redirectParameters' => $request->get('redirectParameters', json_encode([])),
'page' => $page,
'loginError' => (bool) $request->get('loginError'),
'waitTime' => $request->get('waitTime'),
'errorSnippet' => $request->get('errorSnippet'),
'data' => $data,
]);
}
}
字符串
1条答案
按热度按时间kse8i1jr1#
店面控制器不应装饰。如果你想在页面模板中添加数据,监听
AccountLoginPageLoadedEvent
并在页面中添加扩展。如果你想实现自定义逻辑,例如在实际的登录过程中,你应该decorate the corresponding store-api路由
Shopware\Core\Checkout\Customer\SalesChannel\LoginRoute
,这是为了装饰。