Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Версия Laravel:5.4
Версия PHP: 5.6.11
Операционная система и её версия: Windows 10 x64
Вендор и версия Веб-сервера: Apache 2.4
методом get посылается запрос с параметром all. Если all=true, забираются все данные из бд, если false, происходит выборка. Т.е в зависимости от параметра метода get возвращается либо один json, либо другой.
Получаю ошибку MethodNotAllowedHttpException
Код:
Route::get('banners/{all}', 'BannerController@index');
app\Http\Controllers\BannerController.php
class BannerController extends Controller
{
public function index($all)
{
if(strcasecmp($all,"false"))
$banners = Banner::all();
else
$banners = Banner::where('relevance','=',true)->get();
if(!$banners->isEmpty())
return response()->json($banners, 200);
else return response()->json("data not found",204);
}
....
}
app\Models\Banner.php
class Banner extends Model
{
protected $primaryKey = 'uuid';
protected $fillable = ['url', 'image_url','path','relevance'];
}
Изменено AmeRain (08.09.2017 15:25:52)
Не в сети
как выглядит url, по которому пытаетесь перейти?
Не в сети
Я вот так бы написал:
public function index()
{
$banners = Banner::where(request('all') ? [] : ['relevance' => true])->get();
return response()->json($banners, $banners->isEmpty() ? 204 : 200);
}
Передавать сообщение здесь не обязательно, есть код. А если передавать, то не хардкодить.
Маршрут должен выглядеть так:
Route::get('banners', 'BannerController@index');
Тогда при запросе /banners?all=true будут выдаваться все баннеры, а при запросе /banners будут выдаваться только релевантные. Если нужно именно /banner?all=false, тогда request('all') нужно заменить на request('all') === 'true', но это криво как-то.
Не в сети
В принципе, я так и делаю теперь, но все равно не понимаю, почему не работает вариант, который написан мной изначально.
Такие примеры и в документации есть.
Не в сети
Страницы 1