Skip to content

Conversation

@vovayatsyuk
Copy link

Note: this integration requires the 2.26.1 version of Breeze module because of new $.breeze.getFormKey() method.

@wpoortman
Copy link
Collaborator

wpoortman commented Oct 7, 2025

Amazing stuff @vovayatsyuk, very grateful for this MR 😍

I've read your comment on the discussion I've started and it seems you've overcome the questions.

I am working on some improvements and I wonder if we can make this work for versions before 2.26.1. So I'll leave this PR open until that stuff gets merged in and will take a look into this also installing the theme.

In the meanwhile, could you maybe add a little component to a random page and make a quick screencast from it? Would already love to see something on screen.

Once again, great contribution and thanks for putting in the time!

This commit restores class names on the components' root element before morph.
@vovayatsyuk
Copy link
Author

Made a video of minimal component on the product page:

View video
Screencast.from.08.10.25.16.58.24.webm

@wpoortman wpoortman added the V3 label Oct 9, 2025
@vovayatsyuk
Copy link
Author

Just stumbled with weird behavior. I see the 404 request to .../en_US/Magewirephp_Magewire/js/alpinejs.min.js on all pages except the one with Magewire block.

It's coming from alpinejs.phtml

@wpoortman
Copy link
Collaborator

I think for now, this is save to merge right? Some upgrades for the next beta will probably fix more stuff in terms of the 404 you've noticed. Can you confirm this can be merged?

@vovayatsyuk
Copy link
Author

vovayatsyuk commented Nov 21, 2025

Wanted to check if everything is ok, but "Increment" button doesn't work anymore. Request to https://magento2.test/magewire/update returns

1 exception(s):
Exception #0 (LogicException): Front controller reached 100 router match iterations

Exception #0 (LogicException): Front controller reached 100 router match iterations
<pre>#1 Magento\Framework\App\FrontController\Interceptor->___callParent() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:138]
#2 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() called at [app/code/Magento/Store/App/FrontController/Plugin/RequestPreprocessor.php:99]
#3 Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:135]
#4 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() called at [app/code/Magento/PageCache/Model/App/FrontController/BuiltinPlugin.php:76]
#5 Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:135]
#6 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:153]
#7 Magento\Framework\App\FrontController\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:23]
#8 Magento\Framework\App\FrontController\Interceptor->dispatch() called at [lib/internal/Magento/Framework/App/Http.php:116]
#9 Magento\Framework\App\Http->launch() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:58]
#10 Magento\Framework\App\Http\Interceptor->___callParent() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:138]
#11 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [app/code/Magento/ApplicationPerformanceMonitor/Plugin/ApplicationPerformanceMonitor.php:38]
#12 Magento\ApplicationPerformanceMonitor\Plugin\ApplicationPerformanceMonitor->aroundLaunch() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:135]
#13 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:153]
#14 Magento\Framework\App\Http\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:23]
#15 Magento\Framework\App\Http\Interceptor->launch() called at [lib/internal/Magento/Framework/App/Bootstrap.php:264]
#16 Magento\Framework\App\Bootstrap->run() called at [pub/index.php:30]
</pre>

Removed the outdated message

@wpoortman
Copy link
Collaborator

Try and see what happens when using upgrade/hc branch instead of main. Some big changes were made.

@vovayatsyuk
Copy link
Author

vovayatsyuk commented Nov 25, 2025

Still the same 100 router match iterations error.

It's caused by exception thrown by $this->serviceInputProcessor->convertValue: https://github.com/magewirephp/magewire/blob/upgrade/hc/src/Controller/MagewireUpdateRoute.php#L115

"Snapshot" is not supported. Correct the field name and try again.

#0 magento2/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php(355): Magento\Framework\Webapi\ServiceInputProcessor->processInputErrorForNestedSet()
#1 magento2/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php(573): Magento\Framework\Webapi\ServiceInputProcessor->_createFromArray()
#2 magento2/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php(556): Magento\Framework\Webapi\ServiceInputProcessor->processComplexTypes()
#3 magento2/vendor/magewirephp/magewire/src/Controller/MagewireUpdateRoute.php(120): Magento\Framework\Webapi\ServiceInputProcessor->convertValue()
#4 magento2/vendor/magewirephp/magewire/src/Controller/MagewireUpdateRoute.php(74): Magewirephp\Magewire\Controller\MagewireUpdateRoute->parseRequest()
#5 magento2/vendor/magewirephp/magewire/src/Controller/Router.php(34): Magewirephp\Magewire\Controller\MagewireUpdateRoute->match()
#6 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(58): Magewirephp\Magewire\Controller\Router->match()
#7 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(138): Magewirephp\Magewire\Controller\Router\Interceptor->___callParent()
#8 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magewirephp\Magewire\Controller\Router\Interceptor->Magento\Framework\Interception\{closure}()
#9 magento2/generated/code/Magewirephp/Magewire/Controller/Router/Interceptor.php(23): Magewirephp\Magewire\Controller\Router\Interceptor->___callPlugins()
#10 magento2/lib/internal/Magento/Framework/App/FrontController.php(144): Magewirephp\Magewire\Controller\Router\Interceptor->match()
#11 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch()
#12 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent()
#13 magento2/app/code/Magento/Store/App/FrontController/Plugin/RequestPreprocessor.php(99): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#14 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(135): Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch()
#15 magento2/app/code/Magento/PageCache/Model/App/FrontController/BuiltinPlugin.php(76): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#16 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(135): Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch()
#17 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#18 magento2/generated/code/Magento/Framework/App/FrontController/Interceptor.php(23): Magento\Framework\App\FrontController\Interceptor->___callPlugins()
#19 magento2/lib/internal/Magento/Framework/App/Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch()
#20 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(58): Magento\Framework\App\Http->launch()
#21 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(138): Magento\Framework\App\Http\Interceptor->___callParent()
#22 magento2/app/code/Magento/ApplicationPerformanceMonitor/Plugin/ApplicationPerformanceMonitor.php(38): Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}()
#23 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(135): Magento\ApplicationPerformanceMonitor\Plugin\ApplicationPerformanceMonitor->aroundLaunch()
#24 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}()
#25 magento2/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http\Interceptor->___callPlugins()
#26 magento2/lib/internal/Magento/Framework/App/Bootstrap.php(264): Magento\Framework\App\Http\Interceptor->launch()
#27 magento2/pub/index.php(30): Magento\Framework\App\Bootstrap->run()
#28 {main}

I've debugged further to see what caused the issue and found this Exception throwm by Magento: https://github.com/magento/magento2/blob/2.4.8-p3/lib/internal/Magento/Framework/Reflection/TypeProcessor.php#L924-L934

Each method must have a doc block.
See Magewirephp\Magewire\Mechanisms\HandleRequests\ComponentRequestContext::getSnapshot()

#0 magento2/lib/internal/Magento/Framework/Reflection/TypeProcessor.php(875): Magento\Framework\Reflection\TypeProcessor->getReturnFromDocBlock()
#1 magento2/lib/internal/Magento/Framework/Reflection/TypeProcessor.php(301): Magento\Framework\Reflection\TypeProcessor->getMethodReturnAnnotation()
#2 magento2/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php(319): Magento\Framework\Reflection\TypeProcessor->getGetterReturnType()
#3 magento2/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php(578): Magento\Framework\Webapi\ServiceInputProcessor->_createFromArray()
#4 magento2/lib/internal/Magento/Framework/Webapi/ServiceInputProcessor.php(561): Magento\Framework\Webapi\ServiceInputProcessor->processComplexTypes()
#5 magento2/vendor/magewirephp/magewire/src/Controller/MagewireUpdateRoute.php(120): Magento\Framework\Webapi\ServiceInputProcessor->convertValue()
#6 magento2/vendor/magewirephp/magewire/src/Controller/MagewireUpdateRoute.php(74): Magewirephp\Magewire\Controller\MagewireUpdateRoute->parseRequest()
#7 magento2/vendor/magewirephp/magewire/src/Controller/Router.php(34): Magewirephp\Magewire\Controller\MagewireUpdateRoute->match()
#8 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(58): Magewirephp\Magewire\Controller\Router->match()
#9 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(138): Magewirephp\Magewire\Controller\Router\Interceptor->___callParent()
#10 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magewirephp\Magewire\Controller\Router\Interceptor->Magento\Framework\Interception\{closure}()
#11 magento2/generated/code/Magewirephp/Magewire/Controller/Router/Interceptor.php(23): Magewirephp\Magewire\Controller\Router\Interceptor->___callPlugins()
#12 magento2/lib/internal/Magento/Framework/App/FrontController.php(144): Magewirephp\Magewire\Controller\Router\Interceptor->match()
#13 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch()
#14 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent()
#15 magento2/app/code/Magento/Store/App/FrontController/Plugin/RequestPreprocessor.php(99): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#16 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(135): Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch()
#17 magento2/app/code/Magento/PageCache/Model/App/FrontController/BuiltinPlugin.php(76): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#18 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(135): Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch()
#19 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#20 magento2/generated/code/Magento/Framework/App/FrontController/Interceptor.php(23): Magento\Framework\App\FrontController\Interceptor->___callPlugins()
#21 magento2/lib/internal/Magento/Framework/App/Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch()
#22 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(58): Magento\Framework\App\Http->launch()
#23 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(138): Magento\Framework\App\Http\Interceptor->___callParent()
#24 magento2/app/code/Magento/ApplicationPerformanceMonitor/Plugin/ApplicationPerformanceMonitor.php(38): Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}()
#25 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(135): Magento\ApplicationPerformanceMonitor\Plugin\ApplicationPerformanceMonitor->aroundLaunch()
#26 magento2/lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}()
#27 magento2/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http\Interceptor->___callPlugins()
#28 magento2/lib/internal/Magento/Framework/App/Bootstrap.php(264): Magento\Framework\App\Http\Interceptor->launch()
#29 magento2/pub/index.php(30): Magento\Framework\App\Bootstrap->run()
#30 {main}

I've tried if DocBlock will help:

  1. Adding /** @return Snapshot */ causes Class "Snapshot" does not exist
  2. Adding /** @return \Magewirephp\Magewire\Mechanisms\HandleComponents\Snapshot */ fixes this error, but the new one occurs: Class "array" does not exist

p.s. I'm using Magento 2.4.8-p3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants