Какой из них лучше?
Оба пути в порядке. Но если вы можете покрыть их с помощью шаблона, это будет лучше, потому что вам не нужен дополнительный массив. В противном случае массив более читабелен и специфичен, потому что из массива вы можете получить четкое представление о том, что old-sulg
заменяется на new-slug
. Кроме того, если и одно старое перенаправление на один новый sulg, и другое старое перенаправление на другой новый slug, тогда pattern не будет хорошим выбором здесь. С другой стороны, если все старые слагы перенаправят только на один и тот же новый слаг, то лучше будет по возможности скороговорка.
Как исправить последнее решение?
В этом решении вы определяете шаблон / выражение с именем. Как:
Route::pattern('pattern_name', 'pattern');
Теперь, когда вы захотите использовать этот шаблон, вы можете просто использовать имя pattern
. Например:
Route::get('url/{pattern_name}', function(){
// Codes
});
здесь, если шаблон URL совпал с шаблоном define, то будет вызвано замыкание.
Итак, чтобы ваш код заработал, вы должны изменить его следующим образом:
Route::pattern('old_slug', '(1|2)');
Route::get('/b/{old_slug}', function ($oldSlug) {
return redirect('/b/3' 301);
});
Здесь ваше имя шаблона old-slug
, а шаблон 1|2
означает 1 or 2
. В результате, если кто-то позвонит /b/1
или /b/2
, он будет соответствовать шаблону и выполнит return redirect('/b/3' 301);