Вызвать контроллер с параметром?

#php #laravel #laravel-controller

#php #laravel #laravel-контроллер

Вопрос:

Давайте представим, что у меня есть две модели:

  1. Список пользователей User
  2. Список шариков 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) {} правильно? Просто получите к нему доступ.