Laravel 5 Nice URL

时间:2017-07-25 06:52:41

标签: url laravel-5

我想为我的网站设置一些不错的网址,但我的问题是我的GET参数并非总是被填充。

例如,我可以拥有所有这些不同的参数:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

但是我不太确定我是否应该为我可能拥有的所有不同场景创建路线,或者是否有其他方法可以获得一些不错的URL?

我想到它的样子: ?brand=BMW&model=i8+m4&location=USA ?brand=BMW&location=USA ?brand=BMW+Audi

但如果我必须为每个场景创建路线,它可能会变得很长!

/brand/BMW+Audi/location/USA/model/i8

否则我也可以创建一些动态参数,例如:

Route::get(/brand/{brand})
Route::get(/brand/{brand}/location/{location})
Route::get(/brand/{brand}/model/{model}/location/{location})
Route::GET(/location/{location})...

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我认为获取参数是一个完美的解决方案。但如果你想要“漂亮的网址”,你可以做类似的事情:

Route::get('/brands/{brand}', 'BrandController@search');
Route::get('/brands/{brand}/{model}', 'BrandController@search');
Route::get('/brands/{brand}/{model}/{location}', 'BrandController@search');

然后在你的BrandController中:

public function search($brand, $model = null, $location = null)
{
    //
}

这样$model$location或可选。您还可以$brand选择$brand = null。但是这些路线现在至少需要一个参数。