خب هردوش شدنیه اولی که مثال زدم کافیه از یک عبارت منظم مناسب استفاده کنید و روش دوم هم میتونید یک Middleware تعریف کنید مثلا CityMiddleware رو اینطوری تعریف میکنیم :
namespace AppHttpMiddleware;
use Closure;
class CityMiddleware
{
protected $cities;
public function __construct()
{
$this->cities = ['تهران', 'شیراز', 'اصفهان', 'تبریز', 'مشهد'];
}
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!in_array($request->city, $this->cities)) {
abort(404);
}
return $next($request);
}
}
باید قبلش این Middleware رو توی Kernel.php ثبت کنید که میتونید توی مبحث Middleware های آموزشهای همین انجمن نحوه ایجاد و ثبتش رو بخونید.
حالا اگر یک route به این صورت داشته باشیم :
Route::get('cities/{city}', function() {
return 'It Works!';
})->middleware('city');
من Middleware رو به نام city ثبت کرده بودم بنابراین به این route اعمالش کردم و اگه تست کنید می بینید به درستی کار میکنه در ضمن شما می تونید اسامی شهرها رو از دیتابیس یا به صورت دیگه ای که اونهارو در اختیار دارین دریافت و استفاده کنید