Просмотр файла app/Controllers/Load/SearchController.php

Размер файла: 1.75Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Controllers\Load;
  6.  
  7. use App\Classes\Validator;
  8. use App\Controllers\BaseController;
  9. use App\Models\Down;
  10. use Illuminate\Http\Request;
  11.  
  12. class SearchController extends BaseController
  13. {
  14. /**
  15. * Поиск
  16. *
  17. * @param Request $request
  18. * @param Validator $validator
  19. *
  20. * @return string
  21. */
  22. public function index(Request $request, Validator $validator): string
  23. {
  24. $find = $request->input('find');
  25. $downs = collect();
  26.  
  27. if ($find) {
  28. $find = rawurldecode(trim(preg_replace('/[^\w\x7F-\xFF\s]/', ' ', $find)));
  29.  
  30. $validator->length($find, 3, 64, ['find' => __('main.request_length')]);
  31. if ($validator->isValid()) {
  32. if (config('database.default') === 'mysql') {
  33. [$sql, $bindings] = ['MATCH (title, text) AGAINST (? IN BOOLEAN MODE)', [$find . '*']];
  34. } else {
  35. [$sql, $bindings] = ['title ILIKE ? OR text ILIKE ?', ['%' . $find . '%', '%' . $find . '%']];
  36. }
  37.  
  38. $downs = Down::query()
  39. ->where('active', 1)
  40. ->whereRaw($sql, $bindings)
  41. ->with('user', 'category')
  42. ->paginate(setting('downlist'))
  43. ->appends(compact('find'));
  44.  
  45. if ($downs->isEmpty()) {
  46. setInput($request->all());
  47. setFlash('danger', __('main.empty_found'));
  48. redirect('/loads/search');
  49. }
  50. } else {
  51. setInput($request->all());
  52. setFlash('danger', $validator->getErrors());
  53. }
  54. }
  55.  
  56. return view('loads/search', compact('downs', 'find'));
  57. }
  58. }