- 🇦🇹Austria drunken monkey Vienna, Austria
Is anyone running into this able to provide a backtrace?
- 🇧🇷Brazil kleiton_rodrigues Americana/SP
The patch #2 looks good!
+1 RTBC - 🇦🇹Austria drunken monkey Vienna, Austria
As said, please provide a backtrace so we can get to the real root cause here. Just masking the problem is usually not the wisest approach.
- Status changed to Postponed: needs info
almost 2 years ago 9:26am 25 February 2023 - Status changed to Needs work
about 1 year ago 7:02am 10 October 2023 @drunken monkey hope this helps. What I've noticed anytime the cache is cleared this error pops up.
Deprecated function: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in Drupal\search_api\Utility\Utility::splitPropertyPath() (line 142 of modules/contrib/search_api/src/Utility/Utility.php). Drupal\search_api\Utility\Utility::splitPropertyPath(NULL, ) (Line: 355) Drupal\search_api\Utility\FieldsHelper->retrieveNestedProperty(Array, NULL) (Line: 478) Drupal\search_api\Item\Field->getDataDefinition() (Line: 201) _search_api_views_get_handlers(Object) (Line: 61) search_api_views_data() (Line: 236) Drupal\views\ViewsData->Drupal\views\{closure}(Object, 'search_api') (Line: 405) Drupal\Core\Extension\ModuleHandler->invokeAllWith('views_data', Object) (Line: 244) Drupal\views\ViewsData->getData() (Line: 154) Drupal\views\ViewsData->get('search_api_index_dev_content_index') (Line: 85) Drupal\views\Plugin\ViewsHandlerManager->getHandler(Array, NULL) (Line: 888) Drupal\views\Plugin\views\display\DisplayPluginBase->getHandlers('field') (Line: 1045) Drupal\views\ViewExecutable->_initHandler('field', Array) (Line: 903) Drupal\views\ViewExecutable->initHandlers() (Line: 2318) Drupal\views\Plugin\views\display\DisplayPluginBase->preExecute() (Line: 1697) Drupal\views\ViewExecutable->preExecute(Array) (Line: 1632) Drupal\views\ViewExecutable->executeDisplay('page_1', Array) (Line: 81) Drupal\views\Element\View::preRenderViewElement(Array) call_user_func_array(Array, Array) (Line: 101) Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 788) Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 374) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204) Drupal\Core\Render\Renderer->render(Array, ) (Line: 242) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 580) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 243) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 132) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Line: 142) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 174) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 81) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106) Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23) Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 718) Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
So looking a bit into it, right after the php error search API I also get:
Drupal\search_api\SearchApiException while adding Views handlers for field on index Content index dev: Could not retrieve data definition for field '' on index 'Content index dev'. in Drupal\search_api\Item\Field->getDataDefinition() (line 482 of /var/www/html/web/modules/contrib/search_api/src/Item/Field.php).
Now the weird part is I have no clue where I'm getting a field with an empty string label.
Okay, so even more digging it looks like this happens with 3 special fields
search_api_id
,search_api_language
, andsearch_api_datasource
and it could potentially happen because of the backend I'm usingSearch API Meilisearch
. But I'm not sure what the original issue was using, so hard to tell if it's down to the backend.- Status changed to Needs review
about 1 year ago 11:19am 10 October 2023 - last update
about 1 year ago 467 pass, 70 fail - 🇮🇳India sarwan_verma
Hello @indefinitedevil,
I have fixed this issue PHP 8.1 Deprecated Function , some other issues resolve and also created patch,
please review and verify. The last submitted patch, 14: search_api-3308184.patch, failed testing. View results →
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.- Status changed to Needs work
about 1 year ago 11:59am 10 October 2023 @sarwan_verma So for some reason the tests are failing, but that said the specific fix meant for this issue is the same as the original patch file, and that does work. But the maintainer wants to fix this problem at the root cause, method docs requires that parameter to already be a string and not NULL.
- last update
about 1 year ago Composer require-dev failure - @sarwan_verma opened merge request.
So the NULL check is not a good solution, if you just do that you'll still get this in the dblog:
Drupal\search_api\SearchApiException while adding Views handlers for field on index Content index dev: Could not retrieve data definition for field '' on index 'Content index dev'. in Drupal\search_api\Item\Field->getDataDefinition() (line 482 of /var/www/html/web/modules/contrib/search_api/src/Item/Field.php).
While it fixes the depreciation error, you are still getting a SearchApiException that is correctly handled and logged.
Here I've made a small change in the
search_api.views.inc
file at least for my case it fixes it, could someone please test the patch file? Thanks.- last update
about 1 year ago Patch Failed to Apply - last update
about 1 year ago Patch Failed to Apply - last update
about 1 year ago 543 pass - last update
about 1 year ago 544 pass - Status changed to Needs review
about 1 year ago 6:09am 11 October 2023 - last update
about 1 year ago 545 pass - 🇦🇹Austria drunken monkey Vienna, Austria
Thanks for the backtrace and the additional information!
The problem indeed seems to come from the Meilisearch backend. I don’t think it’s smart to include those special fields there, since it might confuse users.
That being said, it seemssearch_api_views_data()
already guards against fields with no property path, and_search_api_views_get_handlers()
just fails to do the same. So I think this is still also a bug in this module.The attached patch should fix it, please test/review! It also adds a check in
\Drupal\search_api\Item\Field::getDataDefinition()
to avoid callingretrieveNestedProperty()
with aNULL
property path, which should help debug if this problem ever arises again.Note: The patch requires PHP 8.0, but that should really be required at this point. (It apparently even is for Drupal 9, without me noticing it.)
- Status changed to RTBC
about 1 year ago 9:08am 23 October 2023 The provided patch fixes the deprecation issue, so this can probably be merged. So now with the meilisearch, this error pops up since the special fields are indexed there, so I guess the added debugging code also works:
Drupal\search_api\SearchApiException while adding Views handlers for field on index Content index: Field 'search_api_language' on index 'Content index' has no property path set. in Drupal\search_api\Item\Field->getDataDefinition() (line 479 of /var/www/html/web/modules/custom/search_api/src/Item/Field.php).
I will be opening an issue on the Search API Meilisearch module about this, but I'm not sure if is it ok to index these fields or not. If it's ok what would be the correct approach?
That said I'm setting this issue as RTBC.
-
drunken monkey →
committed 47ccf060 on 8.x-1.x
Issue #3308184 by drunken monkey, admirlju: Fixed handling of incomplete...
-
drunken monkey →
committed 47ccf060 on 8.x-1.x
- Status changed to Fixed
about 1 year ago 11:36am 28 October 2023 - 🇦🇹Austria drunken monkey Vienna, Austria
Good to hear, thanks for testing!
Merged. Thanks again! Automatically closed - issue fixed for 2 weeks with no activity.