oc-mall-plugin icon indicating copy to clipboard operation
oc-mall-plugin copied to clipboard

\MallComponent::decode(): Argument #1 ($value) must be of type string, null given, called in \components\Product.php on line 44

Open dathwa opened this issue 9 months ago • 2 comments

Hello. Mall 3.2.1. Tried creating my first test virtual product with variants. It's breaking on frontend Screenshot of product and error below.

Edit-product

[2024-05-02 12:14:26] development.ERROR: TypeError: OFFLINE\Mall\Components\MallComponent::decode(): Argument #1 ($value) must be of type string, null given, called in \plugins\offline\mall\components\Product.php on line 443 and defined in \plugins\offline\mall\classes\traits\HashIds.php:25
Stack trace:
#0 \plugins\offline\mall\components\Product.php(443): OFFLINE\Mall\Components\MallComponent->decode(NULL)
#1 \plugins\offline\mall\components\Product.php(206): OFFLINE\Mall\Components\Product->getItem()
#2 \modules\cms\classes\controller\HasComponentHelpers.php(61): OFFLINE\Mall\Components\Product->init()
#3 \modules\cms\classes\Controller.php(656): Cms\Classes\Controller->addComponent('product', 'product', Array)
#4 \modules\cms\classes\Controller.php(350): Cms\Classes\Controller->initComponents()
#5 \modules\cms\classes\Controller.php(226): Cms\Classes\Controller->runPage(Object(Cms\Classes\Page))
#6 \modules\cms\classes\CmsController.php(71): Cms\Classes\Controller->run('product/virtual...')
#7 \vendor\laravel\framework\src\Illuminate\Routing\Controller.php(54): Cms\Classes\CmsController->run('product/virtual...')
#8 \vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php(43): Illuminate\Routing\Controller->callAction('run', Array)
#9 \vendor\laravel\framework\src\Illuminate\Routing\Route.php(260): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Cms\Classes\CmsController), 'run')
#10 \vendor\laravel\framework\src\Illuminate\Routing\Route.php(205): Illuminate\Routing\Route->runController()
#11 \vendor\laravel\framework\src\Illuminate\Routing\Router.php(798): Illuminate\Routing\Route->run()
#12 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#13 \vendor\laravel\framework\src\Illuminate\Routing\Middleware\SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#14 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#15 \vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#16 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#17 \vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 \vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest(Object(Illuminate\Http\Request), Object(Illuminate\Session\Store), Object(Closure))
#19 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#20 \vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#21 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 \vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#24 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#25 \vendor\laravel\framework\src\Illuminate\Routing\Router.php(799): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#26 \vendor\laravel\framework\src\Illuminate\Routing\Router.php(776): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#27 \vendor\laravel\framework\src\Illuminate\Routing\Router.php(740): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#28 \vendor\october\rain\src\Router\CoreRouter.php(32): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#29 \vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(190): October\Rain\Router\CoreRouter->dispatch(Object(Illuminate\Http\Request))
#30 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#31 \plugins\offline\speedy\classes\middleware\CDNMiddleware.php(23): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): OFFLINE\Speedy\Classes\Middleware\CDNMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 \plugins\offline\speedy\classes\middleware\Http2Middleware.php(38): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#34 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): OFFLINE\Speedy\Classes\Middleware\Http2Middleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 \plugins\offline\responsiveimages\classes\ResponsiveImagesMiddleware.php(30): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): OFFLINE\ResponsiveImages\Classes\ResponsiveImagesMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#37 \vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#38 \vendor\october\rain\src\Foundation\Http\Middleware\CheckForMaintenanceMode.php(23): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#39 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): October\Rain\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#40 \plugins\vdlp\redirect\classes\RedirectMiddleware.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#41 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(180): Vdlp\Redirect\Classes\RedirectMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#42 \vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#43 \vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(165): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#44 \vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(134): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#45 \index.php(43): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#46 {main}  


dathwa avatar May 02 '24 12:05 dathwa

I have the same problem with the Wishlist Component and I have. created a patch here...

cyril-design avatar May 03 '24 14:05 cyril-design

I've got the same error here... I managed to fix it by changing line 25 of plugins/offline/mall/classes/traits/HashIds.php

public function decode(string $value = null)

And that seems to work perfectly (for now).

chocolata avatar May 14 '24 14:05 chocolata

Damn... Just got this error:

TypeError: Hashids\Hashids::decode(): Argument #1 ($hash) must be of type string, null given, called in /var/www/vhosts/domain.com/httpdocs/plugins/offline/mall/classes/traits/HashIds.php on line 27 and defined in /var/www/vhosts/domain.com/httpdocs/vendor/hashids/hashids/src/Hashids.php:148

Fixed it by changing the decode function to:

    public function decode(string $value = null)
    {
        if($value === null) {
            return null;
        }
        $result = app(Hasher::class)->decode($value) ?? null;
        if (is_array($result) && count($result) === 1) {
            return $result[0];
        } else {
            return $result;
        }
    }

Seems to work... But we really need a more robust solution... Can we look into this please?

chocolata avatar May 20 '24 22:05 chocolata

This is fixed in v3.3.0

tobias-kuendig avatar Jun 02 '24 07:06 tobias-kuendig