Search code examples
laravellaravel-5laravel-routinglaravel-5.3

Two slashes in url with optional parameters in Laravel 5


I want to create Users`s shop in my application. Default urls are:

site.com/cars
site.com/parts

If user create own shop urls viewed like this:

site.com/user_name/cars
site.com/user_name/parts

And if user do not create store, parameter {user_name} is empty and urls viewed like:

site.com//cars
site.com//parts

How can I create routes or middlewares for this?

Thank you.

UPD:

My routes

Route::group(['domain' => 'site.com'], function () {

    Route::group(['prefix' => LaravelLocalization::setLocale(), 'middleware' => ['localeSessionRedirect', 'localizationRedirect', 'maintenance_mode']], function()
    {
        Route::group(['prefix' => '{store_name?}', 'namespace' => 'UserOnlineShop', 'middleware' => ['online_shop_tarif']], function(){
            Route::get('/', ['as' => 'user_store.home', 'uses' => 'HomeController@index']);
            Route::get('parts/', ['as' => 'parts.index', 'uses' => 'PartsViewController@all_parts']);
            Route::get('catalog/cars_for_parts', ['as' => 'catalog.auto_brands', 'uses' => 'AutoCatalogController@auto_brands']);
        });
    });
});

Solution

  • I think what your looking for is this:

    Route::get('site.com/{user_name?}/cars', function ($user_name = null){
    
           return view
    });
    

    The ? makes the user_name oprional and the null is needed and can be any other default value.

    For what your asking (using named controllers) you may do it this way. Add this to your route group:

    Route::get('site.com/{user_name?}/cars', ['as' => 'site.cars', 'uses' => 'CarController@car_names']);
    

    Then in controller do:

    public function car_names($user_name = null){
    
        return view;
    }
    

    Source: laravel optional parameters