我们有一个餐厅页面,用户可以在其中添加他的邮政编码,我们正在显示餐厅。我们已经这样解决了: web.php
Route::group(['prefix' => 'restaurants', 'namespace' => 'frontEnd', 'middleware'=>'checkzipcode'], function () {
Route::get('/', 'RestaurantController@showAllRestaurants');
Route::post('/', 'RestaurantController@showAllRestaurants');
Route::get('search','RestaurantController@searchRestaurant');
Route::post('typefilter','RestaurantController@productTypeFilter');
RestaurantController.php
public function showAllRestaurants(Request $request)
{
$getZipCode = session::get('zipcode',$request->zip_code);
if(!empty($getZipCode))
{
if(Auth::check()) {
$country_code = Auth::user()->country_code;
} else {
$country_code = Common::GetIPData()->iso_code;
}
// get all restaurant using zipcode
$all_restaurant = Restaurant::leftJoin('restaurant_delivery_areas','restaurant_delivery_areas.restaurant_id','=','restaurants.id')
->leftJoin('zip_codes','zip_codes.id','=','restaurant_delivery_areas.zip_code_id')
->leftJoin('restaurant_cuisines','restaurant_cuisines.restaurant_id','=','restaurants.id')
->where('restaurants.country_code',$country_code)
->where(function ($q) use($getZipCode) {
$q->where('restaurants.zip',$getZipCode)
->orWhere('zip_codes.postal_code',$getZipCode)
->where('restaurant_delivery_areas.is_active','=',1);
});
因此,现在我们只希望为每个db的zip压缩一个页面,如:test.com/restaurants/zip
有人建议吗?
答案 0 :(得分:1)
不确定我是否理解您的问题。但是在我看来,您只想将邮政编码作为url参数传递,而不是在GET查询中传递。
如果是这样,您可以将zip作为showAllRestaurants()方法的第二个参数接收,如下所示:
public function showAllRestaurants(Request $request, $zip_code){
//...
}
现在,您的方法内部的$ zip_code变量上收到了邮政编码。
并更改web.php以支持它。
Route::group(['prefix' => 'restaurants', 'namespace' => 'frontEnd', 'middleware'=>'checkzipcode'], function () {
Route::get('/{zip_code}', 'RestaurantController@showAllRestaurants');
Route::post('/{zip_code}', 'RestaurantController@showAllRestaurants');
Route::get('search','RestaurantController@searchRestaurant');
Route::post('typefilter','RestaurantController@productTypeFilter');
为避免在这种情况下发生路由冲突,您应该使用一些正则表达式来告诉laravel zip_code
是什么,否则,如果您说/ restaurants / search,它将认为'search'词是zip_code
如果您的邮政编码只有数字。您可以像下面这样在路由上添加where()子句。
Route::get('/{zip_code}', 'RestaurantController@showAllRestaurants')->where('zip_code', '[0-9]+');
Route::post('/{zip_code}', 'RestaurantController@showAllRestaurants')->where('zip_code', '[0-9]+');
如果您的邮政编码包含其他字符,则应在Google上搜索(或自己创建一个)适合您邮政编码格式的正则表达式。
希望这就是您想要的。