magewire icon indicating copy to clipboard operation
magewire copied to clipboard

Breeze integration

Open vovayatsyuk opened this issue 2 months ago • 6 comments

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

vovayatsyuk avatar Oct 07 '25 08:10 vovayatsyuk

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!

wpoortman avatar Oct 07 '25 08:10 wpoortman

Made a video of minimal component on the product page:

View video

vovayatsyuk avatar Oct 08 '25 14:10 vovayatsyuk

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

vovayatsyuk avatar Oct 10 '25 13:10 vovayatsyuk

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?

wpoortman avatar Nov 21 '25 08:11 wpoortman

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

vovayatsyuk avatar Nov 21 '25 10:11 vovayatsyuk

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

wpoortman avatar Nov 21 '25 10:11 wpoortman

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

vovayatsyuk avatar Nov 25 '25 08:11 vovayatsyuk