Я разрабатываю веб-сайт, которому всегда нужен город в URL-адресе. Что-то вроде этого:Определить префикс динамического маршрута
http://www.examples.com/city/offers
Если пользователь попытаться получить доступ к URL:
http://www.examples.com/offers
мне нужно перенаправить его на страницу, чтобы выбрать город, чтобы увидеть предложения. Если пользователь уже выбирает город, я устанавливаю cookie (или сеанс), чтобы определить город, который он выбрал.
Я могу сделать это с использованием префиксов маршрута, но как мне сделать динамически?
Я попробовал этот подход:
$city = Request::segment(1);
Route::group(array('prefix' => $city), function()
{
Route::get('/', array('as' => 'home', 'uses' => '[email protected]'));
/* Blog Resource */
Route::resource('blog', 'BlogController', array('only' => array('index', 'show')));
});
Проблема с этим кодом является то, что если доступ пользователя этой страницы:
`http://www.example.com/blog`
система будет думать, что «блог» является текущим город.
Другой подход, который я пытался (код немного грязный):
$city = Request::segment(1);
if ($city == null)
{
$city = Session::get('cidade');
}
if ($city != null)
{
$city = City::where('slug', '=', $city)->first();
}
if (sizeof($city) > 0)
{
Session::put('city', $city['slug']);
$requestedPath = Request::path();
if (!str_contains($requestedPath, $city['slug']))
{
return Redirect::to('/' . $city['slug'] . $requestedPath)->sendHeaders();
}
}
else
{
Redirect::to('/choose')->sendHeaders();
exit();
}
Route::group(array('prefix' => $city), function()
{
Route::get('/', array('as' => 'home', 'uses' => '[email protected]'));
Route::resource('blog', 'BlogController', array('only' => array('index', 'show')));
});
Проблема с выше кода цикл. Если пользователь обратится к странице http://www.example.com/offers
, система распознает, что offers
не является городом и перенаправляет пользователя на http://www.example.com/choose
, чтобы пользователь мог выбрать город. Но когда перенаправлять choose
, система будет распознавать еще раз, что choose
это не город и держать перенаправлять ...
Я знаю, что у меня есть возможность использовать поддомены, но в данном случае я не могу использовать, потому что клиент нужно так.
Я уже пробовал этот пакет (https://github.com/jasonlewis/enhanced-router), но он решает мою проблему 50%. Другая проблема заключается в том, что она всегда заставляет меня ставить город при создании URL:
{{ URL::action('[email protected]', 'city' }}
Это решает мою проблему. Спасибо. – Fuhrmann