statamic / eloquent-driver

Provides support for storing your Statamic data in a database, rather than flat files.
https://statamic.dev/tips/storing-content-in-a-database
MIT License
104 stars 71 forks source link

Error with Blink::once when sending form with 2 file fields #314

Closed julio-cavallari closed 1 day ago

julio-cavallari commented 5 days ago

Bug description

When I submit a form that has 2 file fields, when checking whether the file exists using the exisits() method of the Statamic\Eloquent\Assets\Asset::class, Blink::once is used to create a cache for the current request, and this causes the second file not to exist in the cache and returns the error Call to a member function path() on null

How to reproduce

  1. Create a fresh project
  2. Install eloquent-driver
  3. Create a form with 2 required file fields
  4. Submit the form

Logs

[2024-06-27 19:03:38] local.ERROR: Call to a member function path() on null {"exception":"[object] (Error(code: 0): Call to a member function path() on null at /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Fieldtypes/Assets/Assets.php:135)
[stacktrace]
#0 [internal function]: Statamic\\Fieldtypes\\Assets\\Assets->Statamic\\Fieldtypes\\Assets\\{closure}('formularios::ca...', 0)
#1 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(600): array_map(Object(Closure), Array, Array)
#2 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(778): Illuminate\\Support\\Arr::map(Array, Object(Closure))
#3 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Fieldtypes/Assets/Assets.php(134): Illuminate\\Support\\Collection->map(Object(Closure))
#4 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Fields/Field.php(324): Statamic\\Fieldtypes\\Assets\\Assets->process('formularios::ca...')
#5 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Collections/HigherOrderCollectionProxy.php(60): Statamic\\Fields\\Field->process()
#6 [internal function]: Illuminate\\Support\\HigherOrderCollectionProxy->Illuminate\\Support\\{closure}(Object(Statamic\\Fields\\Field), 'cartao_antt')
#7 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(600): array_map(Object(Closure), Array, Array)
#8 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(778): Illuminate\\Support\\Arr::map(Array, Object(Closure))
#9 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Collections/HigherOrderCollectionProxy.php(59): Illuminate\\Support\\Collection->map(Object(Closure))
#10 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Fields/Fields.php(187): Illuminate\\Support\\HigherOrderCollectionProxy->__call('process', Array)
#11 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Http/Controllers/FormController.php(59): Statamic\\Fields\\Fields->process()
#12 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): Statamic\\Http\\Controllers\\FormController->submit(Object(Statamic\\Http\\Requests\\FrontendFormRequest), Object(Statamic\\Eloquent\\Forms\\Form))
#13 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction('submit', Array)
#14 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Statamic\\Http\\Controllers\\FormController), 'submit')
#15 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#16 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#17 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#18 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#19 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#20 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#21 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#22 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#23 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /Users/juliocavallari/Sites/php/laravel/ype/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))
#26 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#28 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/HandlePrecognitiveRequests.php(41): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\HandlePrecognitiveRequests->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#35 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#36 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#37 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#38 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#39 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#40 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Http/Middleware/StopImpersonating.php(12): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#41 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\StopImpersonating->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#42 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Http/Middleware/DisableFloc.php(17): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#43 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\DisableFloc->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#44 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Http/Middleware/CheckMultisite.php(14): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#45 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\CheckMultisite->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#46 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Http/Middleware/CheckComposerJsonScripts.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#47 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\CheckComposerJsonScripts->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#48 /Users/juliocavallari/Sites/php/laravel/ype/vendor/statamic/cms/src/Http/Middleware/PoweredByHeader.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#49 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\PoweredByHeader->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#50 /Users/juliocavallari/Sites/php/laravel/ype/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(66): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#51 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#52 /Users/juliocavallari/Sites/php/laravel/ype/app/Http/Middleware/SecurityHeaders.php(16): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#53 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\SecurityHeaders->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#54 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#55 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#56 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#57 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#58 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#59 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#60 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#61 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#62 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#63 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#64 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(62): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#65 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#66 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#67 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#68 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#69 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#70 /Users/juliocavallari/Sites/php/laravel/ype/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#71 /Users/juliocavallari/Sites/php/laravel/ype/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#72 {main}
"}

Environment

Environment
Application Name: Ypê
Laravel Version: 10.48.14
PHP Version: 8.2.18
Composer Version: 2.6.5
Environment: local
Debug Mode: ENABLED
URL: ype.local
Maintenance Mode: OFF

Cache
Config: CACHED
Events: NOT CACHED
Routes: CACHED
Views: CACHED

Drivers
Broadcasting: log
Cache: statamic
Database: mysql
Logs: daily
Mail: smtp
Queue: database
Session: database

Statamic
Addons: 5
Antlers: runtime
Sites: 3 (Português, Inglês, Espanhol)
Stache Watcher: Enabled
Static Caching: Disabled
Version: 4.40.0 PRO

Statamic Addons
statamic/eloquent-driver: 2.10.0
statamic/seo-pro: 5.4.4
statamic/statamic-image-optimize: dev-develop
xndbogdan/statamic-bard-text-color: 4.0.0
ype/statamic-two-factor: dev-develop

Statamic Eloquent Driver
Asset Containers: eloquent
Assets: eloquent
Blueprints: file
Collection Trees: eloquent
Collections: file
Entries: eloquent
Forms: eloquent
Global Sets: file
Global Variables: file
Navigation Trees: eloquent
Navigations: eloquent
Revisions: eloquent
Taxonomies: eloquent
Terms: eloquent

Additional details

No response

ryanmitchell commented 5 days ago

I believe this will be fixed by https://github.com/statamic/eloquent-driver/pull/308 - just waiting on a new release in core so we can merge and tag it.

ryanmitchell commented 3 days ago

Released in v4.7.0 - please let me know if this fixes your issue.

duncanmcclean commented 1 day ago

Since this has been fixed, I'm going to close this in the meantime. If it doesn't fix the issue, let us know and we can re-open. Thanks!