Laravel相反在Controller和web.php中使用Session

时间:2018-09-29 11:03:39

标签: php laravel session-variables

我们有一个餐厅页面,用户可以在其中添加他的邮政编码,我们正在显示餐厅。我们已经这样解决了: 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

有人建议吗?

1 个答案:

答案 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上搜索(或自己创建一个)适合您邮政编码格式的正则表达式。

希望这就是您想要的。