Set priority for Classes as Listeners

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);

Functions moved to classes. I need priorities to run classes as listeners.

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,
    ];

  }
}

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