我目前正在开发一个Shopware插件,以显示从注册页面登录页面.该实现运行正常.

然而,我遇到了一个问题,Shopware表明Auth控制器已成为内部控制器,不再可以访问.我正在寻找一个可以用于这一目的的替代职业.

你能推荐一个替代身份验证控制器的类吗?

<?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,
        ]);
    }
}

推荐答案

店面控制器不应该被装饰.如果您想要将数据添加到页面的模板listen for AccountLoginPageLoadedEvent and add extensions to the page.

如果您想实现自定义逻辑,例如在实际登录过程中,您应该改为decorate the corresponding store-api路由Shopware\Core\Checkout\Customer\SalesChannel\LoginRoute,即intended to be decorated.

Php相关问答推荐

在Woocommerce变量产品中的标签附近显示所选属性选项名称

Htaccess-重写对&api.php";的API请求以及对";web.php";的其他请求

创建一个新的可变产品及其属性以用于WooCommerce中的变体

在Laravel中为表添加前缀,以将它们逻辑地分组

如何在WooCommerce产品子类别中显示特定内容

将一个情态形式放在细丝v3中的形式中间

删除了数组中的值,而不是多个数组

如何在php网站代码中清理浏览器缓存

Laravel 10中的Validator类

为什么PHP PDO忽略NOT NULL约束?

PHP 8.2 弃用日志(log)存储在 Laravel 10.22.0 中的哪里?

关于Laravel缓存出现的错误

htaccess 重定向子域错误的 url

在 PHP 8.2 中使用 PHP Spreadsheet 和 CodeIgniter 3 导出 Excel 时出错

从图像URL中获取文件扩展名?

在WooCommerce购物车和 checkout 页面中更改总计文本

适当的时区处理 Laravel / Carbon

Docker: unixodbc.h 没有这样的文件或目录.已安装 unixodbc-dev 时出现pecl install sqlsrv错误

为什么非贪婪匹配会消耗整个模式,即使后面跟着另一个非贪婪匹配

复杂的mysql查询问题