Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Laravel 8.10.0
PHP 7.4.11
public function getRandomProduct()
{
$product = Products::getRandomProduct(); // Из БД выбирает случайную запись, и возвращает в массиве title, producty_name и др. поля, иначе false
if ($product) { // проверка, есть ли в массиве записи, можно было бы и if (empty($product)) или if (count($product)) это не важно
return view('product', $product); // подключает шаблон Blade для отображения, передает туда массив
} else {
abort('404'); // если из БД ничего не выбрано то выводится шаблон для страницы ошибки 404
}
}
Всем доброго дня!
Помогите новичку разобраться с синтаксисом Route.
Задача: При вводе URL, например, http://site.ru/random должна отображаться случайная страница товара.
При этом URL в браузере тоже должен меняться на URL этой случайной страницы, ну например на http://site.ru/product/123, т.е. редирект 301.
Как работает сейчас:
в файле web.php
Route::get('/random', [AppController::class, 'getRandomProduct']);
Перенаправляет на случайную страницу, но в браузере URL остается тот же http://site.ru/random.
Команда php artisan route:list показывает этот маршрут и в Action прописан правильно контроллер.
Теперь я хочу сделать редирект. Меняю Route. Для теста сначала хочу просто перенаправить на главную страницу
Route::get('/random', function() {
return redirect()->action([AppController::class, 'getIndexPage']);
});
Этот код работает, перенаправляет на главную и URL в браузере меняется. Но в route:list Action теперь Closer, он не видит контроллер.
Ну и когда подключаю нужный котроллер к Route
Route::get('/random', function() {
return redirect()->action([AppController::class, 'getRandomProduct']);
});
То Laravel показывает ошибку:
InvalidArgumentException
Action App\Http\Controllers\AppController@getRandomProduct not defined.
И в route:list Action теперь тоже Closer, он не видит контроллер.
Пробовал посмотреть URL который возвращает контроллер, как описано в доках:
$url = action([AppController::class, 'getRandomProduct']);
Та же самая ошибка: InvalidArgumentException
Action App\Http\Controllers\AppController@getRandomProduct not defined.
Код контроллера:
public function getRandomProduct()
{
$product = Products::getRandomProduct();
if ($product) {
return view('product', $product);
} else {
abort('404');
}
}
Помогите разобраться, что я делаю не правильно?
Любая помощь новичку будет важна и полезна: методическая, ссылка на док или правка кода. Заранее спасибо!