#php #laravel #laravel-controller
#php #laravel #laravel-контроллер
Вопрос:
Давайте представим, что у меня есть две модели:
- Список пользователей
User
- Список шариков
Marble
, который принадлежит одномуUser
Я хотел бы получить все существующие шарики с api/marbles
помощью и только с моими шариками api/user/marbles
. Идея состоит в том, чтобы избежать маршрута с именем like api/marbles?owned=true
В моих маршрутах API у меня есть это:
Route::get('marbles', 'MarbleController@index');
Route::get('user/marbles', 'MarbleController@index(true)');
Затем в моем MarbleController:
class MarbleControllerextends Controller
{
function index($owned = false) {
return $owned ? Marble::where('user_id', Auth::id())->get() : Marble::all();
}
}
К сожалению MarbleController@index(true)
, на самом деле это не работает, потому (true)
что Laravel не будет принят, чтобы не заполнять необязательную $owned
переменную.
Есть ли способ избежать определения нового метода, такого как Route::get('user/marbles', 'MarbleController@owned');
function owned() {
return $this->index(true);
}
Комментарии:
1. @RonvanderHeijden Действительно, это может сработать
2. @N69S Нет, это не так:(
3. какую версию laravel вы используете
4. @NurbekBoymurodov 8.5
5. @N69S
Route::get
принимает только 2 аргумента
Ответ №1:
Route::get('marbles/{me?}', 'MarbleController@index'); will work fine.
Вот me
необязательный параметр. Если вы его опустите, он примет false
значение в противном true
случае.
Комментарии:
1. Вероятно, это антишаблон, независимо от того, насколько хорошо он работает (или как вызывается переменная). Я имею в виду, что проблема заключается в концепции (как объяснено выше), а не обязательно в коде.
2. Принимает параметр.
function index($me=false) {}
правильно? Просто получите к нему доступ.