Перенаправление индекса с параметрами фильтра, сохраненными в сеансе - PullRequest
0 голосов
/ 09 января 2019

Итак, на данный момент у меня есть обычный ресурсный маршрут с индексом, создать, сохранить, отредактировать, обновить, обычный. В Индексе у меня есть несколько параметров фильтра, которые отфильтровывают записи. Достаточно просто. Я хочу, чтобы параметры фильтра были сохранены, а при создании, обновлении или удалении этого параметра, когда вы будете перенаправлены обратно в индекс, параметры фильтра все равно будут сохранены и отфильтрованы. У меня проблема в том, что я не хочу перенаправлять без необходимости. Фильтр находится в форме, и он продолжает отправлять в индекс каждый раз, когда его значения изменяются. В этом случае я не хочу, чтобы это было перенаправление. До сих пор я пытался разобраться, если это редирект или просто фильтр, который изменился. Я хочу быть в состоянии сказать, совпадает ли предыдущий маршрут с текущим маршрутом в этом случае индексный маршрут. Однако все ресурсы начинаются с одного и того же имени маршрута. URL перенаправления сохраняется в сеансе в переменной «cultivar_form_return_url», а затем помещается в переменную, которая будет использоваться для проверки необходимости перенаправления.

session(['cultivar_form_return_url' => $request->fullUrl()], '');
$redirect_url = $request->session()->get('cultivar_form_return_url', '');

if($redirect_url && !$has_filtered && !$filter) {
   return redirect($redirect_url);
}
$cultivars = $query
            ->orderBy('name')
            ->paginate(20);

return view('database.cultivars.index',compact('cultivars','filter','redirect_url'));

$ redirect_url - это URL, созданный при отправке запроса на фильтрацию. Я использую этот URL для перенаправления, когда я возвращаюсь из создания, обновления или удаления. Который содержит параметры для поиска. Я проверяю, существует ли redirect_url, для второго параметра перенаправления я создал переменную, которая начинается как false, и если в моем запросе есть параметры для фильтра в каждой функции, я устанавливаю переменную в true следующим образом.

if($request->has('input')) {
   $has_filtered = true;
   $query = $query->where('input', $request->input);
   $filter['input'] = $request->input;
}

Последний параметр для проверки перенаправления - это переменная фильтра, которая содержит параметры моего фильтра, которые начинаются как пустые и устанавливаются для каждой функции, если этот конкретный фильтр установлен.

$has_filtered = false;

    $query = (new Cultivar);

    $filter = [
        'search' => null,
        'crop' => null,
        'is_rootstock' => null,
        'is_public' => null,
    ];

Я хотел бы различать перенаправления и параметры фильтра, которые просто меняются. Благодарю вас. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Итак, мой предыдущий ответ, после небольшого тестирования, все еще содержит несколько ошибок. Поэтому я придумала лучшее решение. Вместо сохранения URL перенаправления в сеансе я поместил его в form.php в качестве одного из входных данных. И редактировать, и создавать работает через form.php. Я просто спрятал поле и использую это поле для отслеживания предыдущего состояния, которым был фильтр.

<input type="hidden" name="redirect_url" value="{{ $redirect_url }}">

Маршрут перенаправления начинается с общего маршрута ('database.cultivars.index'), затем я проверяю, является ли это старым состоянием, чтобы пройти по перенаправленному маршруту, если произошла ошибка проверки или что-то, что могло бы перенаправить вас на той же странице, чтобы сохранить настройки фильтра. Затем я проверяю, совпадает ли предыдущий маршрут с текущим маршрутом, и означает ли это, что страница обновлена ​​или произошла ошибка проверки. Если предыдущий и текущий маршруты не совпадают, это означает, что вы только что пришли из индекса либо для редактирования, либо для создания. Затем я беру этот маршрут и отправляю его в представление, чтобы поместить в скрытое поле, и процесс повторяется.

$redirect_url = route('database.cultivars.index');

if($request->old('redirect_url')) {
   $redirect_url = $request->old('redirect_url');
} else if(url()->previous() != route('database.cultivars.edit', $cultivar)) {
   $redirect_url = url()->previous();
}

Когда вы успешно создали или обновили сорт, вы будете перенаправлены на URL перенаправления, если таковой имеется. Если его нет, вы просто перенаправлены на маршрут («database.cultivars.index»). Эта часть как в хранилище, так и в обновлении функций контроллера.

if($request->has('redirect_url')) {
    $redirect_url = $request->redirect_url;
}

if($redirect_url && starts_with($redirect_url, route('database.cultivars.index'))) {
    return redirect($redirect_url);
}

С этим ответом нет ошибок и ненужных перенаправлений.

0 голосов
/ 09 января 2019

Подумав больше о проблеме, думаю, у меня может быть ответ на мой вопрос.

$redirect_url = $request->session()->get('cultivar_form_return_url', '');

    if($redirect_url && !$has_filtered && url()->previous() != route('database.cultivars.index')) {

        session(['cultivar_form_return_url' => '']);

        return redirect($redirect_url);
    }

    session(['cultivar_form_return_url' => $request->fullUrl()]);

Это останавливает его от перенаправления на себя снова и снова, сохраняя при этом опции фильтра. При этом также не перенаправляя без необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...