URL に常に都市が必要な Web サイトを開発しています。このようなもの:
http://www.examples.com/city/offers
ユーザーがこの URL にアクセスしようとした場合:
http://www.examples.com/offers
オファーを表示する都市を選択するページに彼をリダイレクトする必要があります。ユーザーがすでに都市を選択している場合、選択した都市を識別するために Cookie (またはセッション) を設定します。
Route プレフィックスを使用してそれを行うことはできますが、動的に行うにはどうすればよいですか?
私はこのアプローチを試しました:
$city = Request::segment(1);
Route::group(array('prefix' => $city), function()
{
Route::get('/', array('as' => 'home', 'uses' => 'HomeController@index'));
/* 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' => 'HomeController@index'));
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% 解決しました。もう 1 つの問題は、URL を作成するときに常に都市を入力する必要があることです。
{{ URL::action('HomeController@index', 'city' }}