how in
Event::listen('offline.sitesearch.query', FindTitle::class);
Event::listen('offline.sitesearch.query', FindDiscounts::class);
Event::listen('offline.sitesearch.query', FindContent::class);
set priority? a comma and a digit after the class causes the error “Call to undefined function \class_blablabla”
https://docs.octobercms.com/3.x/extend/services/event.html#subscribe-using-priority
// Run first
Event::listen('auth.login', function() { ... }, 10);
// Run second
Event::listen('auth.login', function() { ... }, 5);
apinard:
function() { ... }
Functions moved to classes. I need priorities to run classes as listeners.
daft
May 18, 2023, 3:41am
#4
When passing a priority, it uses a different engine (October\Rain\Events\PriorityDispatcher
). This is because Laravel dropped priority support way back in Laravel 5.5.
What does your class look like? Eg FindTitle::class
full code class FindTitle
<?php namespace KonvertAgency\Landing\Classes\ExtendSitesearch;
use KonvertAgency\Landing\Models\Page;
use Lang;
class FindTitle
{
public function handle($query)
{
$items = Page
::whereNull('deleted_at')
->where('hidden', false)
->where('no_search', false)
->where('title', 'like', "%${query}%")
->get();
$results = $items->map(function ($item) use ($query) {
$group = array_filter($item->content, function ($item) {
return isset($item['_group']) && $item['_group'] == 'title_page';
});
$txt = false;
array_walk_recursive($group, function ($value, $key) use ($query, &$txt) {
if ($key == 'sub_title') {
$txt = $value;
}
});
return [
'title' => $item->title,
'text' => $txt,
'url' => $item->slug,
];
});
return [
'provider' => Lang::get('konvertagency.landing::lang.search.title'),
'results' => $results,
];
}
}
daft
May 19, 2023, 6:54am
#6
We will fix this in the next patch (v3.3.15).
For now, try the following workaround:
Event::listen('offline.sitesearch.query', function() {
return App::make(FindTitle::class)->handle();
});
This is the equivalent functionality
Сlosure function did not receive a parameter.
Added:
Event::listen('offline.sitesearch.query', function($query) {
return App::make(FindTitle::class)->handle($query);
}, 1);
Event::listen('offline.sitesearch.query', function($query) {
return App::make(FindDiscounts::class)->handle($query);
}, 2);
Event::listen('offline.sitesearch.query', function($query) {
return App::make(FindContent::class)->handle($query);
}, 3)
it works.
And the priorities work.
Thanks!
1 Like