mardi 5 mars 2019

Passing several, optional, key/value pairs in URL with Laravel

I am making a project management application in Larvel. TaskController@index queries the db and return tasks. To be efficient and elegant, I want to be able to pass it several, optional, key/value pairs in the URL, like /tasks/org_id/36/status/open or /tasks/proj_id/1557/status/closed, and have it return the tasks based on those variables. My code is below, but the problem is getting the route to be able to receive the optional key/value pairs. Also, they shouldn't all have to all be submitted all of the time if they aren't needed.

Route/web.php:

Route::get('/tasks/status/{status}/proj_id/{proj_id}/user_id/{user_id}/org_id/{org_id}
/creator_id/{creator_id}', 'TaskController@index')->name('tasks.index');

Route::resource('tasks', 'TaskController')->except([
    'tasks.index'
]);

Controller:

class TaskController extends Controller
{

    public function index($proj_id = null, $recipient_id = null, $org_id = null, $creator_id = null, $status = null)
    {

        $tasks = Task::where('recipient_id', auth()->user()->id)
            ->when($status, function ($query, $status) {
                return $query->where('status', $status);
            })
            ->when($recipient_id, function ($query, $recipient_id) {
                return $query->where('recipient_id', $recipient_id);
            })
            ->when($public, function ($query, $public) {
                return $query->where('public', $public);
            })
            ->get();

        return view('tasks.index', compact('tasks'));
    }

How do I get the route to be able to accept a variety of optional key/value pairs?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire